从find命令输出中删除换行符

10

我希望将find命令的输出与我的脚本之一一起使用,只需一个命令即可完成。

我的脚本可以接受以下参数:

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

我想用一个“查找命令”替换file1.txt file2.txt file3.txt
some-script --input `find ./txts/*/*.txt` --output final.txt

但是这会出现问题,因为find命令的输出中有换行符。


1
尝试使用-print0参数查找,这将在没有换行符的情况下打印结果。 - David
3个回答

12

使用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的手册,了解findprintf操作接受的其他格式规范。
  • .更改为其他目录路径以搜索其他目录树。


1
这应该适用于您使用的任何shell脚本语言。
示例:
find . -type f | grep "\.cc" > ~/lolz.tmp
tr '\n' ' ' < ~/lolz.tmp

您的例子:

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

为什么在可以直接使用管道的情况下还要使用额外的临时文件呢? - Pratham
当然,你也可以使用管道,所有这些工具都支持它。 - Martin G
tr -d '\n' 怎么样? - stephanmg

0
为什么不使用ls命令而是find命令呢? 例如: some-script --input ls ./txts/*/*.txt --output final.txt ls输出的文件为./txt/file1.txt ./txt/one/file2.txt ..等
编辑--- 您可以使用find并将换行符替换为空格,如下所示:
some-script --input find ./txts/*/*.txt | tr '\n' ' ' --output final.txt

不知道ls命令是否在其他地方也被支持,而且它也不能确保只有一个空格。 - KingJulian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接