如何连接 bash 中 find 命令找到的文件

如何连接 bash 中 find 命令找到的文件

使用 bash 命令搜索文件时find,我想将结果文件连接成一个新文件。例如,如果 find 命令得出:

find . -name "configuration_dev.txt"

./tmp/configuration1/configuration_dev.txt
./tmp/configuration2/configuration_dev.txt

我想将两个文件的内容直接作为 bash 命令连接成一个新文件。

答案1

一种可能的方法是通过将输出通过管道传输到findxargs通过连接文件的内容cat,然后可以将输出重定向到新文件:

find . -name '*file*' | xargs -I{} cat "{}" > output

上述命令将cat调用每个文件,然后语句的整个输出 xargs将重定向到文件output。更有效的方法是使用空分隔符 - 得益于@pLumo对于此更新:

find . -name '*file*' -print0 | xargs -0 cat > output

答案2

实现所需结果的命令是:

find . -name "configuration_dev.txt" -exec cat > testing.txt {} +

这里对上面这一行进行了很好的解释:find 的 -exec 命令中的 {} + 是什么意思?

答案3

您还可以在 中打开多个文件cat并将输出重定向到新文件。由于 会返回多个文件的名称find,因此您可以在catusing `(反引号)中使用它:

cat `find . -name "configuration_dev.txt"` > testing.txt

反引号之间的命令将被执行并由命令的输出替换,删除尾随的新行字符并插入空格。

您可以通过运行来确认

A=`find . -name "configuration_dev.txt"`
echo $A

您会发现输出类似于:

./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt

因此,实际的cat命令将是:

cat ./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt > testing.txt

答案4

Rust 工具fd,它是 的用户友好型替代方案find,使这一切变得非常容易。

fd -X cat \; "configuration_dev.txt" . > output

-X是一次性对所有搜索结果批量执行命令。这个命令的好处是(自 v8.4.0 起) 是它不会因错误而失败Argument list too long

相关内容