从 find 命令输出中删除新行

Kin*_*ian 6 shell terminal

我想在一个命令中将 find 命令的输出与我的脚本之一一起使用。

我的脚本接受:

some-script --input file1.txt file2.txt file3.txt --output final.txt
Run Code Online (Sandbox Code Playgroud)

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

some-script --input `find ./txts/*/*.txt` --output final.txt
Run Code Online (Sandbox Code Playgroud)

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

Los*_*ity 10

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

find . -name someFile -type f -printf "%p "
Run Code Online (Sandbox Code Playgroud)

上面会在当前目录或任何子目录中找到所有名为“someFile”的文件,然后打印结果,不换行。

例如,给定这个目录树:

.../dir1/someFile.txt
.../dir1/dir2/someFile.txt
Run Code Online (Sandbox Code Playgroud)

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

someFile.txt ./dir2/someFile.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您不提供该-type f选项,find则将报告所有名为someFile. 此外,find的手册页列出了可以提供的其他参数,这些参数-type将导致find仅搜索目录、仅搜索可执行文件或仅搜索链接等...
  • 更改-printf "%p "-printf "%f "打印文件名 sans path,或者再次查看find的手册页以了解findprintf操作接受的其他格式规范。
  • 更改.到某个其他目录路径以搜索其他目录树。


Mar*_*n G 2

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

例子:

find . -type f | grep "\.cc" > ~/lolz.tmp
tr '\n' ' ' < ~/lolz.tmp
Run Code Online (Sandbox Code Playgroud)

你的例子:

find ./txts/*/*.txt > ~/lolz2.tmp
tr '\n' ' ' < ~/lolz2.tmp
Run Code Online (Sandbox Code Playgroud)