Linux 为什么|不';你不能和find一起工作吗?

Linux 为什么|不';你不能和find一起工作吗?,linux,bash,shell,Linux,Bash,Shell,为什么下面的命令旨在递归删除所有.svn文件夹 find . -name ".svn" | rm -rfv 不起作用 我知道find命令提供了-exec选项来解决此问题,但我只想了解那里发生了什么。它不起作用,因为rm不接受其标准输入流上的文件名列表 仅供参考,对于可能包含空格的目录,最安全的处理方法是: find . -name .svn -exec rm -frv {} \; 或者,如果你是为了速度而射击: find . -name .svn -print0 | xargs -0

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

   find . -name ".svn" | rm -rfv
不起作用


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

它不起作用,因为rm不接受其标准输入流上的文件名列表

仅供参考,对于可能包含空格的目录,最安全的处理方法是:

find . -name .svn -exec rm -frv {} \;
或者,如果你是为了速度而射击:

find . -name .svn -print0 | xargs -0 rm -frv

在您的示例中,
find
的结果被传递到
rm
的STDIN<但是,code>rm不希望其参数出现在STDIN中


是输入重定向工作原理的一个示例。

rm
不从标准输入读取文件名,因此将忽略通过管道传输到它的任何数据


它唯一使用标准输入的是检查它是否是终端,这样它就可以确定是否进行提示。

find do与|一起工作(例如
find~-name.svn | grep“a”
),但问题在于
rm

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


如果您阅读了问题的其余部分:“我知道
find
命令提供了
-exec
选项来解决此问题,但我只想了解那里发生了什么。”。编辑:好的,现在您已经编辑了足够多的内容来处理它。我希望
-exec rm-frv{}+
是最快的,因为它有最少的进程。最后!有人真的回答了这个问题!每个回答都回答了为什么,尽管有些回答有点含糊不清。这是因为
grep
需要来自STDIN的输入,而
rm
忽略通过管道传输到它的任何内容并需要参数。