如何查找并删除.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