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)
我该怎么办呢?我还想知道如何使用文件名中的自定义字符串(而不仅仅是扩展名)来执行此操作。
在 bash with extglob
set 中你可以使用负匹配:
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)
请参阅此处了解血淋淋的细节。
这相当于find
匹配选项的使用和否定。我强烈建议不先测试结果-delete
。
find . -maxdepth 1 -type f -not -name "*.png" -delete
Run Code Online (Sandbox Code Playgroud)