为什么以下命令旨在递归删除所有.svn文件夹
find . -name ".svn" | rm -rfv
不起作用?
我知道find
命令提供了-exec
选项来解决这个问题,但我只是想了解那里发生了什么。
答案 0 :(得分:12)
在您的示例中,find
的结果会传递给rm
的STDIN。但是,rm
并不期望它在STDIN中的参数。
Here是输入重定向的工作原理。
答案 1 :(得分:2)
rm
不会从标准输入中读取文件名,因此忽略通过管道传输的任何数据。
它唯一使用标准输入的是检查它是否是终端,因此可以确定是否提示。
答案 2 :(得分:1)
它不起作用,因为rm不接受其标准输入流上的文件名列表。
仅供参考,在可能包含空格的目录中处理此问题的最安全方法是:
find . -name .svn -exec rm -frv {} \;
或者,如果你正在为速度拍摄:
find . -name .svn -print0 | xargs -0 rm -frv
答案 3 :(得分:1)
发现可以使用| (例如find ~ -name .svn | grep "a"
)但问题出在rm
答案 4 :(得分:0)
这个问题类似于其他回答的问题。希望这会有所帮助。