使用 rm 递归删除文件和目录

使用 rm 递归删除文件和目录

是否可以使用 rm 递归删除与模式匹配的文件和目录而不使用其他命令?

答案1

直接回答你的问题,“不 - 你不能做你所描述的事情rm”。

但是,如果你将它与 结合起来,就可以了find。以下是你可以做到的众多方法之一:

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

例如,如果您想要删除所有 *~ 文件,您可以这样做:

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

从评论中扩展*

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm

答案2

“无需使用其他命令”

不。

答案3

使用 Bash 和globstarset,是的

rm basedir/**/my*pattern*

首先尝试使用例如ls -1,然后rm列出匹配的文件。

您可以通过例如设置选项shopt -s globstar


或者,更短的find版本:

find -type f -name 'my*pattern*' -delete

或者对于 GNU find

find -type f -name 'my*pattern*' -exec rm {} +

或者另一个非 GNU 的替代方案find(速度稍慢):

find -type f -name 'my*pattern*' -exec rm {} \;

要删除目录,正如您所要求的:只需在上述命令中更改为,然后仅rm在命令中跳过匹配。rm -r-type ffind

答案4

如果你使用zsh(1),在 .zshrc 中打开“扩展通配符” setopt extendedglob。在模式前加上 '**/' 将会递归删除:

% rm -rf **/<模式>

然而,如果有很多删除的文件你应该采取查找(1)xargs(1)或 -exec,并且我也建议在 shell 脚本中执行此操作。

相关内容