我想在一个命令中使用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命令的输出中有新行。
答案 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