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

use*_*137 13 linux bash find

我有一个目录:

  • 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

我怎么能这样做?

che*_*ner 17

另一种方法是使用额外的,否定的主要find:

 find /backups/ -name "*.7z"  ! -name '_.7z' -type f -mtime +180 -delete
Run Code Online (Sandbox Code Playgroud)

其他答案中的简单正则表达式更适合您的用例,但这证明了使用!可用运算符的更通用方法find.


shx*_*hx2 10

在正则表达式中,^运算符表示"除"之外的任何字符".因此[^_]意思是"除_之外的任何字符".例如:

"[^_]*.7z"
Run Code Online (Sandbox Code Playgroud)

所以,如果你的目的是要排除的文件开始使用_,您的完整的命令行应该是:

find /backups/ -name "[^_]*.7z" -type f -mtime +180 -delete
Run Code Online (Sandbox Code Playgroud)

如果你想排除任何一个 ocnce _,你可以使用andnot运算符find,如:

find . -name "*.7z" -and -not -name "*_*"
Run Code Online (Sandbox Code Playgroud)