75

我在一个目录中有数百个目录和文件。

仅删除目录的最佳方法是什么(无论目录中是否有任何内容,只需将它们全部删除)

目前我使用ls -1 -d */, 并将它们记录在一个文件中,然后执行sed,然后运行它。它相当长的路。我正在寻找仅删除目录的更好方法

4

6 回答 6

238

要删除所有目录和子目录并只保留工作目录中的文件,我发现这个简洁的命令对我有用:

rm -r */

它使用 bash 通配符*/,其中星号后跟斜杠将仅匹配目录和子目录。

于 2011-07-12T17:04:54.163 回答
32

find . -maxdepth 1 -mindepth 1 -type d

然后

find . -maxdepth 1 -mindepth 1 -type d -exec rm -rf '{}' \;

添加解释:

find在当前目录中开始,因为.并且仅在当前目录中停留,-maxdepth并且-mindepth都设置为1. -type d告诉find只匹配目录的东西。

find还有一个-exec标志可以将其结果传递给另一个函数,在本例中为rm. 这'{}' \;是传递这些结果的方式。有关做什么和什么的更完整说明,请参见此答案{}\;

于 2016-04-14T11:24:58.563 回答
13

首轮:

find /path -d -type d

以确保输出看起来正常,然后:

find /path -d -type d -exec rm -rf '{}' \;

-type d仅查找目录,然后-d确保将子目录放在父目录之前。

于 2011-05-10T16:24:42.747 回答
1

简单的方法: -

rm -rf `ls -d */`
于 2019-10-06T18:06:39.363 回答
0

仅查找命令(它支持文件删除)\

find /path -depth -type d -delete

-type d仅查找目录,然后-depth确保将子目录放在父目录之前。-delete删除过滤的文件/文件夹

于 2022-02-22T20:38:10.270 回答
-19

在一行中:

rm -R `ls -1 -d */`

(反引号)

于 2011-05-10T16:28:16.770 回答