我正在尝试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