使用一个命令(查找)删除多种模式的文件

使用一个命令(查找)删除多种模式的文件

我正在尝试find删除当前目录和子目录中与不同模式匹配的文件(递归),并打印匹配的文件以stdout了解哪些文件被删除了。

例如,我想匹配以“&”开头的所有文件以及以“$”开头和结尾的所有文件。
我尝试过使用:

find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;

rm仅适用于最后一场比赛('$*$')。
因此我尝试过:

find . -type f -name '&*' -or -type f -name '$*$' -delete

但这不仅匹配最后一个模式,而且不输出已删除的文件。
我知道我可以这样做:

rm -v ``find -type f -name '&*' -or -type f -name '$*$'``

但我真的很想避免这种方法并通过find命令来完成。

有小费吗?
提前致谢。

答案1

你的问题是执行仅适用于第二种模式,请尝试在搜索条件两边加上括号,以解决该问题:

find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;

需要注意的是,这不是一个错误,而是一个功能,因此您可以执行以下操作:

find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'

如果你需要

答案2

尽管齐柏林飞艇答案是正确的,我也发现了这个解决方案:

寻找 。 -type f \( -name '&*' -or -name '$*$' \) -print -delete

相关内容