我在一个目录中有数百个目录和文件。
仅删除目录的最佳方法是什么(无论目录中是否有任何内容,只需将它们全部删除)
目前我使用ls -1 -d */
, 并将它们记录在一个文件中,然后执行sed
,然后运行它。它相当长的路。我正在寻找仅删除目录的更好方法
要删除所有目录和子目录并只保留工作目录中的文件,我发现这个简洁的命令对我有用:
rm -r */
它使用 bash 通配符*/
,其中星号后跟斜杠将仅匹配目录和子目录。
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
. 这'{}' \;
是传递这些结果的方式。有关做什么和做什么的更完整说明,请参见此答案{}
\;
首轮:
find /path -d -type d
以确保输出看起来正常,然后:
find /path -d -type d -exec rm -rf '{}' \;
-type d
仅查找目录,然后-d
确保将子目录放在父目录之前。
简单的方法: -
rm -rf `ls -d */`
仅查找命令(它支持文件删除)\
find /path -depth -type d -delete
-type d仅查找目录,然后-depth确保将子目录放在父目录之前。-delete删除过滤的文件/文件夹
在一行中:
rm -R `ls -1 -d */`
(反引号)