如何删除目录树中的所有 *.foo?
rm -r *.foo
不起作用。
我可以尝试循环,但这需要递归扩展:
for x in */*/.../*.foo
do rm $x
done
这也是不可能的。
答案1
您可以使用find
:
find -name '*.foo' -delete
答案2
假设你有一个较新版本的 bash:
shopt -s globstar
rm -- **/*.foo
答案3
您可以尝试使用查找:
find /dir/path -name *.foo -exec rm -f {} \;
答案4
最简单的解决方案之一是使用带有以下exec
参数的 find 命令:
find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;
这将查找所有名为 *.foo 的文件并对每个文件执行 rm {filename}。
如果您有很多文件,使用该xargs
命令可能会更快:
find /path/where/to/start/search -type f -name "*.foo" | xargs rm
这将找到所有文件,并将文件名放在 rm 命令后面,直到达到你的发行版/shell 所支持的命令的最大长度,因此运行时它将变成这样:
rm dir1/file1.foo dir1/file2.foo dir1/file3.foo
正如您所想象的,现在rm
二进制文件需要启动的次数要少得多,这使得这成为一个更快的选择。