删除所有包含匹配模式文件的文件夹

Mik*_*Hay 6 directory find rm

我正在尝试删除包含 rar 文件的当前工作目录的所有子目录。

我的第一次尝试:find -name *.rar -exec rm -r {}/.. ';'失败,因为这不是一个有效的目录。我尝试使用dirname {}更明智的命令,但决定在几乎删除我不想要的东西后才问。

我在 Windows 7 上使用 Cygwin。

Gil*_*il' 5

使用 zsh:

rm -rf **/*.rar(:h)
Run Code Online (Sandbox Code Playgroud)

后缀:h应用历史扩展修饰符 h(“head”),它删除每个匹配项的基本名称,仅保留目录部分。

确保检查这些确实是您要删除的目录!例如,先将它们移动到一个临时目录:

mkdir DELETE
mv **/*.rar(:h) DELETE/
# check that you really want to delete everything in DELETE
rm -r DELETE
Run Code Online (Sandbox Code Playgroud)


cpa*_*ast 2

你可以用一对语句来做到这一点。

首先,使用以下命令获取要删除的目录列表

find -name *.rar -exec dirname {} ';' > toremove
Run Code Online (Sandbox Code Playgroud)

接下来,cat toremove确保它包含您想要的文件夹。然后,将其传递给rm -rf使用

sed 's/^/"/g' toremove | sed 's/$/"/g' | xargs rm -r
Run Code Online (Sandbox Code Playgroud)

最后的,rm toremove

  • @MikeL这对你来说已经足够好了,因为Windows文件名不能包含`\"`或换行符,但一般来说,这种方法是不安全的。没有方便的方法可以任意使用`xargs`(除了`xargs -0`)文件名。通常最好[使用`find -exec`](http://unix.stackexchange.com/questions/59890/delete-all-folders-containing-files-which-match-pattern/59913#59913) 。 (2认同)