如何查找所有不具有特定扩展名的文件?

如何查找所有不具有特定扩展名的文件?

我想删除目录中除 .png 文件之外的所有文件。我只想保留图片,并删除其他所有内容。

像这样的事情显然是行不通的:

for file not in *.png;
do
 rm $file
done

我该怎么做?我还想知道如何使用文件名中的自定义字符串(而不仅仅是扩展名)来执行此操作。

答案1

在带有 set 的 bash 中,extglob您可以使用负匹配:

shopt -s extglob # often a default, could be already set
rm *.!(png)
rm !(*keep*|*save*) # everything except files with "keep" or "save" in their name 

这里了解血腥细节。

答案2

这相当于使用find并否定匹配选项。我强烈建议先测试结果-delete

find . -maxdepth 1 -type f -not -name "*.png" -delete

相关内容