使用 find -exec 重定向标准输出

Redirecting stdout with find -exec

我想将一个文件夹及其子文件夹下的所有文件合并成一个文件total.txt,所以我尝试

find . -type f -exec cat {} +; > total.txt

并且无法重定向输出

管道也不行:

find . -type f -exec cat {} + | cat > total.txt

可能是-exec把后面的所有参数都当成命令引起的?

对吗?以及如何解决?或者有没有更好的方法来实现这个。

任何帮助将不胜感激:)

这是一个简单的方法...

## WARNING: this only works for simple cases...
cat $(find ! -path ./total.txt -type f ) >total.txt

这是另一种方法,它对各种特殊情况更健壮,例如文件名中的空格或大量文件...

find ! -path ./total.txt -type f -print0 |xargs -0 cat >total.txt

有几个问题。分号终止命令,所以你是 运行 两个命令,第二个是空重定向。其次,你需要防止 find 找到它正在写入的文件,一个简单的方法是将它向上移动一个目录:

 find . -type f -exec cat {} + > ../total.txt