有一个目录包含以下文件:
.
├── bla-bla-bla1.tar.7z
├── bla-bla-bla2.tar.7z
├── bla-bla-bla3.tar.7z
└── _bla-bla-bla_foo.tar.7z
我需要查找并删除格式为*.7z
except的所有文件_*.7z
我试过了:
find /backups/ -name "*.7z" -type f -mtime +180 -delete
我该怎么做?
另一种方法是使用附加的否定主节点find
:
find /backups/ -name "*.7z" ! -name '_*.7z' -type f -mtime +180 -delete
其他答案中的简单正则表达式更适合您的用例,但这演示了使用!
可用于find
.
在正则表达式中,^
运算符的意思是“除此之外的任何字符”。因此[^_]
表示“除 _ 之外的任何字符”。例如:
"[^_]*.7z"
因此,如果您打算排除以开头的文件_
,您的完整命令行将是:
find /backups/ -name "[^_]*.7z" -type f -mtime +180 -delete
如果您想排除的任何出现_
,您可以使用 的and
和not
运算符find
,例如:
find . -name "*.7z" -and -not -name "*_*"
它应该是
find . -name "*[^_].7z"
鉴于您拥有 bash 4.2.25,一个快速的方法是简单地使用 bash 模式匹配来删除所有 .7z,但具有 _.7z 的那些,如下所示:
touch a.7z b.7z c.7z d_.7z e_.7z f.txt
rm *[^_].7z