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

GCh*_*huf 4 bash scripts automation file-format find

我想删除目录中不是 .png 文件的每个文件。我只想保留照片,其他的都删掉。

像这样的东西,显然不起作用:

for file not in *.png;
do
 rm $file
done
Run Code Online (Sandbox Code Playgroud)

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

xen*_*oid 5

在 bash with extglobset 中你可以使用负匹配:

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 
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解血淋淋的细节。


Mur*_*phy 5

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

find . -maxdepth 1 -type f -not -name "*.png" -delete
Run Code Online (Sandbox Code Playgroud)