如何找到除名字以外的文件?

时间:2013-09-26 06:19:40

标签: linux bash find ereg

我有一个目录:

  • BLA-BLA-bla1.tar.7z
  • BLA-BLA-bla2.tar.7z
  • BLA-BLA-bla3.tar.7z
  • _bla-BLA-bla_foo.tar.7z

我需要查找并删除除“_ .7z”之外的所有文件“ .7z”

我使用find / backups / -name“* .7z”-type f -mtime +180 -delete

我怎么做?

4 个答案:

答案 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