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

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

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

例如 :

a.zip          ->  keep it  
b.jpg          ->  delete it  
a-sample.jpg   ->  keep it  
b-Sample.jpg   ->  keep it  

答案1

删除所有以 . 结尾的文件jpg(不区分大小写),但sample文件名中包含 的文件除外(不区分大小写):

find . ! -iname '*sample*'  -iname '*.jpg' -delete

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

怎么运行的:

  • .

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

  • ! -iname '*sample*'

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

  • -iname '*.jpg'

    此条件与前一个条件相与,查找以 结尾的文件.jpg

  • -delete

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

在运行上述命令之前,您可能需要测试一下。运行:

find . ! -iname '*sample*'  -iname '*.jpg'

这将打印出感兴趣的文件。如果此列表正确,则再次运行-delete附加的命令。

答案2

在 bash 中,你可以使用

shopt -s extglob

启用否定匹配:

rm !(*[Ss]ample*).jpg

要匹配子文件夹,请开启

shopt -s globstar

并使用双星号:

rm **/!(*[Ss]ample*).jpg

相关内容