为什么|不适用于查找?

时间:2011-01-03 09:15:49

标签: linux bash shell

为什么以下命令旨在递归删除所有.svn文件夹

   find . -name ".svn" | rm -rfv

不起作用?

我知道find命令提供了-exec选项来解决这个问题,但我只是想了解那里发生了什么。

5 个答案:

答案 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)

这个问题类似于其他回答的问题。希望这会有所帮助。

How do I include a pipe | in my linux find -exec command?