使用 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
我想将一个文件夹及其子文件夹下的所有文件合并成一个文件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