从find命令输出中删除新行

时间:2014-07-25 11:01:24

标签: shell terminal

我想在一个命令中使用find命令的输出和我的一个脚本。

我的脚本接受:

some-script --input file1.txt file2.txt file3.txt --output final.txt

我想用`find命令替换file1.txt file2.txt file3.txt

some-script --input `find ./txts/*/*.txt` --output final.txt

但是这会打破,因为find命令的输出中有新行。

3 个答案:

答案 0 :(得分:3)

Find可以输出以空格分隔的结果列表,而不依赖于其他命令:

find . -name someFile -type f -printf "%p "

以上内容将在当前目录或任何子目录中找到名为“someFile”的所有文件,然后打印结果而不会出现换行符。

例如,给定此目录树:

.../dir1/someFile.txt
.../dir1/dir2/someFile.txt

从dir1运行find . -name '*.txt' -type f -printf "%p "将输出:

someFile.txt ./dir2/someFile.txt

传递给上述find命令的参数,选项和“操作”(即-printf)可以修改如下:

  • 如果您未提供-type f选项,find将报告名为someFile的所有类型的文件系统条目。此外,find的手册页列出了可以赋予-type的其他参数,这些参数将导致find仅搜索目录,或仅搜索可执行文件,或仅链接等。
  • -printf "%p "更改为-printf "%f "以打印文件名无路径,或者再次查看find的手册页,了解find的{​​{1}的其他格式规范动作接受。
  • printf更改为其他目录路径以搜索其他目录树。

答案 1 :(得分:1)

为什么不使用ls命令而不是find命令。 例如 some-script --input ls ./txts/*/*.txt --output final.txt ls输出文件为./txt/file1.txt ./txt/one/file2.txt ..等等

编辑--- 您可以使用查找并用空格替换换行符,如下所示:
some-script --input find ./txts/*/*.txt | tr '\n' ' ' --output final.txt

答案 2 :(得分:1)

这应该适用于您正在使用的任何shell脚本语言..

示例:

find . -type f | grep "\.cc" > ~/lolz.tmp
tr '\n' ' ' < ~/lolz.tmp

你的例子:

find ./txts/*/*.txt > ~/lolz2.tmp
tr '\n' ' ' < ~/lolz2.tmp