删除一系列子目录中的某些文件

删除一系列子目录中的某些文件

我有一个目录,其中有几个子目录。每个子目录中都有多个文件。我想删除子目录中除 .pdf 文件之外的所有文件。并保留子目录。我用了

find . -type f ! -iname "*.pdf" -delete

但我必须位于子目录中才能使其正常工作。我也想递归地做。

答案1

在 bash 中,要删除当前目录的所有子目录中的所有非 pdf 文件:

shopt -s extglob
rm */!(*.pdf)

首字母*/匹配每个子目录,并且外部全局选项启用!( ... )以下模式:匹配所有文件除了括号内是什么;在本例中,要排除的模式是*.pdf。如果您可能还有.PDF扩展名的文件,请改用:

rm */!(*.[pP][dD][fF])

相关内容