查找并删除linux中所有名为“test”的目录

查找并删除linux中所有名为“test”的目录

我有许多名为“test”的目录,我想删除它们。

我知道如何找到它们并使用以下方法打印它们:

find . -name test -print

现在,我该如何删除目录?


请注意,我的目录中也有文件,也必须删除它们。

答案1

xargs发挥所有魔力:

find . -name test -type d -print0|xargs -0 rm -r --

xargs执行作为参数传递的命令,并将参数传递给 stdin。

这是使用rm -r删除该目录及其所有子目录。

--表示参数的结束,以避免以 开头的路径-被视为参数。

-print0告诉find打印\0字符而不是换行符;并-0告诉xargs仅将其视为\0参数分隔符。

这是一次调用多个目录,避免了每个目录单独rm调用的开销。rm


另外,find也可以为每个已选择文件:

find . -name test -type d -exec rm -r {} \;

这个性能更好,因为它会rm调用一次可同时访问多个目录

find . -name test -type d -exec rm -r {} +

(请注意+最后的;这个相当于xargs解决方案。)

答案2

find /path/to/dir -name "test" -type d -delete
  • -姓名:查找传递的名称。您可以使用-regex基于正则表达式提供名称

  • -类型:查找文件类型。d仅查找目录

  • -删除:删除找到的列表的操作。

或者:

find /path/to/dir -name "test" -type d -exec rm -rf {} \;

作为JF塞巴斯蒂安评论中指出:

您可以使用+而不是\;来一次传递多个目录。

答案3

另一种方法是

find . -name test -exec rm -R "{}" \;

关于 find 的一个有用链接:http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml

答案4

假设 bash 4+

shopt -s globstar
rm -r ./**/test/

尾部斜杠表示它只匹配目录。事先进行测试:

printf '%s\n' ./**/test/

相关内容