如何递归删除所有 JPG 文件,但保留包含“样本”的文件

tac*_*a01 2 linux bash regex rm

如何查找和删除.jpg目录树中的所有文件,但文件名中包含“sample”的文件除外?

例如 :

a.zip          ->  keep it  
b.jpg          ->  delete it  
a-sample.jpg   ->  keep it  
b-Sample.jpg   ->  keep it  
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 7

删除所有以 . jpg(不区分大小写)除了sample文件名中的文件(不区分大小写:

find . ! -iname '*sample*'  -iname '*.jpg' -delete
Run Code Online (Sandbox Code Playgroud)

这将从当前目录开始遍历树中的所有目录。

这个怎么运作:

  • .

    这指定我们从当前目录开始。

  • ! -iname '*sample*'

    这指示find忽略sample其名称中的所有文件。将i-iname使这个测试不区分大小写。

  • -iname '*.jpg'

    此条件与前一个条件相同,查找以.jpg.

  • -delete

    这指示find删除所有此类文件。

在运行上述命令之前,您可能需要对其进行测试。跑:

find . ! -iname '*sample*'  -iname '*.jpg'
Run Code Online (Sandbox Code Playgroud)

这将打印出感兴趣的文件。如果这个列表是好的,那么再次运行命令并-delete附加。