我是shell的新手。我尝试使用以下命令删除当前目录中的所有.txt文件。
find . -name "*.txt" | rm
我意识到这不是删除所有.txt文件最直接的方法 - 它只是一个管道实验。但它只返回rm的使用信息......没有做我的预期。
我的误解在哪里?谢谢!
答案 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和便携式。