1、非递归删除特定文件以外的文件
# 开启extglob模式,能另外识别出5个模式匹配操作符shopt -s extglob# 删除当前目录下除java和py文件外的所有文件,不会删除文件夹rm !(*.java|*.py)
需要注意,想要递归删除特定文件以外的文件,不能使用:rm -rf !(.java|.py)。因为-r递归,不仅会删除文件,还会把所有不以.py和.java结尾的文件夹全部删除掉。这样即使文件夹里有py和java文件,文件夹也会被删除掉,里面的文件自然也全部被删除。
2、递归删除特定文件
这时候需要使用强大的find命令;
# type指定文件类型,f代表文件,d代表目录# -o代表or,能同时指定多个要删除的类型# xargs将find输出的字符串拆分为多个,分别调用rm命令。因为如果字符串过长,rm会报错# 这里无需使用rm -rf,因为find输出的都是文件,没有目录find -type f -name *.java -o -name *.py | xargs rm
3、递归删除特定文件以外的文件
# 每个-name前面都需要加取反符号!find -type f ! -name *.py ! -name *.java | xargs rm
删除之后可能有不少空文件夹,这时候我们将空文件夹删除。
find -type d -empty | xargs rm -rf
这个命令只能删除最里面的空文件夹,不能递归。可能删除子目录后,父目录就变成了空文件夹。所以需要多调用几次。
