如何删除具有特定名称的文件夹

时间:2012-10-23 14:26:23

标签: linux unix rm

在Linux中,如何删除嵌套在文件夹层次结构深处的特定名称的文件夹?

以下路径位于文件夹下,我想删除名为a的所有文件夹。

1/2/3/a
1/2/3/b
10/20/30/a
10/20/30/b
100/200/300/a
100/200/300/b

我应该从父文件夹使用什么Linux命令?

9 个答案:

答案 0 :(得分:126)

使用find for name“a”并执行rm以删除根据您的意愿命名的内容,如下所示:

find . -name a -exec rm -rf {} \;

首先使用ls进行测试列出:

find . -name a -exec ls {} \;

要确保这只删除目录而不删除普通文件,请使用“-type d”arg(如注释中所示):

find . -name a -type d -exec rm -rf {} \;

“{}”代替找到的每个文件“a” - 对每个文件执行exec命令替换。

答案 1 :(得分:108)

如果目标目录为空,请使用find,仅使用目录过滤,按名称过滤,执行rmdir:

find -type d -name a -exec rmdir {} \;

如果您想以递归方式删除其内容,请将-exec rmdir {} \;替换为-delete-prune -exec rm -rf {} \;。其他答案包括有关这些版本的详细信息,也可以归功于它们。

答案 2 :(得分:41)

这也有效 - 它将删除所有名为“a”的文件夹及其内容:

rm -rf `find -type d -name a`

答案 3 :(得分:11)

find ./ -name "FOLDERNAME" | xargs rm -Rf

应该做的伎俩。警告,如果您不小心将./泵入xargs rm -Rf,整个计算机将被删除而无法将其取回,需要重新安装操作系统。

答案 4 :(得分:8)

我有超过100个文件,比如

log-12
log-123
log-34
....

以上答案对我不起作用

但以下命令帮助了我。

find . -name "log-*" -exec rm  -rf {} \;

我将-type作为.,因此会删除以log-开头的文件和文件夹

rm -rf递归删除文件夹,即使它有文件。

如果你想单独使用文件夹

find -type d -name "log-*" -exec rm  -rf {} \;
单独

文件

find -type f -name "log-*" -exec rm  -rf {} \;

答案 5 :(得分:5)

我在这里最终希望删除node_modules文件夹,然后再使用rsync备份正在进行的工作。关键要求是node_modules文件夹可以嵌套,因此需要-prune选项。

首先,我运行此命令以可视方式验证要删除的文件夹:

find -type d -name node_modules -prune

然后我运行此命令将其全部删除:

find -type d -name node_modules -prune -exec rm -rf {} \;

感谢开心果

答案 6 :(得分:3)

结合多个答案,这是在Linux和MacOS上均可使用的命令

rm -rf $(find . -type d -name __pycache__)

答案 7 :(得分:1)

此命令对我有用。确实是递归工作

find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

。 -当前文件夹

“ node_modules”-文件夹名称

答案 8 :(得分:-1)

查找路径/到/ the / folders -maxdepth 1 -name“my_ *”-type d -delete