删除除了指定扩展名的文件以外

时间:2013-07-25 01:17:20

标签: bash shell

我想知道我是否可以删除目录中的每个文件,但是那些具有特定扩展名的文件?

所以,类似的东西会删除所有png文件:

 find "$target" ! -name "*.png" -printf '%f\n' -delete;

但是我该如何删除文件夹中的所有内容,而不是* .png和* .txt文件?

谢谢

3 个答案:

答案 0 :(得分:2)

find允许您将-o用于布尔值or

find "$target" ! \( -name "*.png" -o -name "*.txt" \) -printf '%f\n' -delete;

答案 1 :(得分:2)

仅查找pdf和txt文件(删除,用rm替换printf)

printf "%s\n" *.{pdf,txt}

查找所有BUT pdf和txt文件

shopt -s extglob nullglob
printf "%s\n" !(*.pdf|*.txt)

如果你想进入子目录

shopt -s extglob nullglob globstar
printf "%s\n" **/!(*.pdf|*.txt)

答案 2 :(得分:0)

你可以考虑做这样的事情来删除$ target下不是png文件的每个文件:

find $target -name '*' | grep -v '\.(png|txt)$' | xargs rm