Unix 如何只删除目录而不更改文件

Unix 如何只删除目录而不更改文件,unix,directory,rm,Unix,Directory,Rm,我在一个目录中有数百个目录和文件 仅删除目录的最佳方式是什么(无论目录中是否包含任何内容,只需将其全部删除即可) 目前我使用ls-1-d*/,将它们记录在一个文件中,然后执行sed,然后运行它。这是相当长的一段路。我正在寻找更好的方法只删除目录首先,运行: find /path -d -type d 要确保输出看起来正常,请执行以下操作: find /path -d -type d -exec rm -rf '{}' \; -type d只查找目录,然后确保将子目录放在父目录之前。在一行中:

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

仅删除目录的最佳方式是什么(无论目录中是否包含任何内容,只需将其全部删除即可)

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

首先,运行:

find /path -d -type d
要确保输出看起来正常,请执行以下操作:

find /path -d -type d -exec rm -rf '{}' \;
-type d
只查找目录,然后确保将子目录放在父目录之前。

在一行中:

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

(反引号)

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

rm -r */

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

查找-maxdepth 1-mindepth 1-类型d

然后


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

要添加解释,请执行以下操作:

find
由于
而在当前目录中启动,并且仅在
-maxdepth
-mindepth
都设置为
1
时才停留在当前目录中
-type d
告诉
find
仅匹配目录中的内容

find
还有一个
-exec
标志,可以将其结果传递给另一个函数,在本例中为
rm
'{}'\是传递这些结果的方式

简单方法:-

rm -rf `ls -d */`

不要从
ls
管道输出;特别是不要使用
rm-r
。路径名包含空格时失败,没有考虑空间问题。我会记住这一点。更推荐、更简单的是,第一个命令对我根本不起作用。>找到-d-type-d find:警告:不推荐使用-d选项;请改用-depth,因为后者是与POSIX兼容的特性。查找:无效参数-d到-type@Anthony你有一个额外的连字符在那里。应该是
find/path-d-typed
awesome答案!要跳过y/n问题:rm-rf*/在脚本中使用时请记住展开,因为星号不会在引号中展开。照目前的情况,它应该工作得很好。这是投票率最高的答案,但我正在测试这个问题,因为我正在尝试做同样的事情,但我认为这个答案只是删除了所有内容,并没有达到原始问题的要求。使用时要小心。Catalint/Jeremy的个人资料回答在回答这个问题方面做得更好,至少对我来说是这样。我的情况是,我有一些文件夹,其中包含我想保留的文件,但也有一堆我想删除的空垃圾文件夹,因此需要一个基于
find的命令-maxdepth 1-mindepth 1-type d
是更好的option@Gi0rgi0s:我对你的观点投了赞成票,但是
rm-rf./*/
rm-rf/*/
@JerzyBrzóska也只差一个字符,这是一个bash通配符,我在答案中添加了一个注释,尽管这段代码可以回答问题,提供关于为什么和/或如何回答该问题的额外背景将显著提高其长期价值。请在您的答案中添加一些解释。正如其他人所评论的,如果您的目录名包含空格,这将不起作用。