我有一个目录:
我需要查找并删除除“_ .7z”之外的所有文件“ .7z”
我使用find / backups / -name“* .7z”-type f -mtime +180 -delete
我怎么做?
答案 0 :(得分:17)
另一种方法是使用find
:
find /backups/ -name "*.7z" ! -name '_.7z' -type f -mtime +180 -delete
其他答案中的简单正则表达式更适合您的用例,但这展示了使用!
可用的find
运算符的更一般方法。
答案 1 :(得分:10)
在正则表达式中,^
运算符表示“除了”之外的任何字符。因此[^_]
表示“除_之外的任何字符”。 E.g:
"[^_]*.7z"
因此,如果您打算使用_
排除开始的文件,那么您的完整命令行将是:
find /backups/ -name "[^_]*.7z" -type f -mtime +180 -delete
如果您要排除 _
的 occerance,则可以使用and
的{{1}}和not
运算符,例如:
find
答案 2 :(得分:0)
应该是
find . -name "*[^_].7z"
答案 3 :(得分:0)
给出bash 4.2.25的快速方法是简单地使用bash模式匹配来删除所有.7z,但是那些有_.7z的,如下所示:
touch a.7z b.7z c.7z d_.7z e_.7z f.txt
rm *[^_].7z