为什么shell命令没有找到。 -name“* .txt”| rm删除当前目录中的所有.txt文件?

时间:2014-08-23 12:51:54

标签: shell posix pipe

我是shell的新手。我尝试使用以下命令删除当前目录中的所有.txt文件。

find . -name "*.txt" | rm

我意识到这不是删除所有.txt文件最直接的方法 - 它只是一个管道实验。但它只返回rm的使用信息......没有做我的预期。

我的误解在哪里?谢谢!

2 个答案:

答案 0 :(得分:3)

您应该使用xargs将管道输入数据视为参数:

find . -name "*.txt" | xargs rm

当然,有更简单的方法可以做到这一点:

find . -name '*.txt' -exec rm {} \;

rm *.txt

请注意,后者仅删除当前目录中的文件,而使用find执行递归搜索。

答案 1 :(得分:2)

另一种方法是使用-exec参数:

find . -name "*.txt" -exec rm {} +

关于-exec的鲜为人知的奖金事实:

人们经常使用-exec rm {} \;这会为每个文件启动一个rm进程,您是否使用rm {} +它将获得与ARG_MAX允许的文件一样多的文件并将其传递给rm,即。它的速度要快得多,特别是对于很多文件 This is in POSIX和便携式。