![如何查找所有不具有特定扩展名的文件?](https://linux22.com/image/919946/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E6%89%80%E6%9C%89%E4%B8%8D%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E6%89%A9%E5%B1%95%E5%90%8D%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我想删除目录中除 .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