删除目录树中的所有 *.foo

删除目录树中的所有 *.foo

如何删除目录树中的所有 *.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二进制文件需要启动的次数要少得多,这使得这成为一个更快的选择。

相关内容