假设我有一个名为
foo/
的目录。这个文件夹包含子目录。我该如何用一个命令删除所有空目录?foo/
的目录。这个文件夹包含子目录。我该如何用一个命令删除所有空目录?find . -empty -type d -delete
find
命令用于从指定路径中(在此情况下为当前目录,即 .
)搜索符合特定搜索条件的文件/目录。
-empty
选项适用于所有空文件和目录。
-type d
选项适用于指定的 文件 类型;在此情况下,d
表示文件类型为 目录。
-delete
选项是要执行的操作,适用于搜索到的所有文件。rmdir
命令拒绝删除非空目录的特性,以及 find -depth
选项从底部向上遍历目录树:find . -depth -exec rmdir {} \;
2>/dev/null
来真正忽略它们。
-depth
选项用于find
命令,从目录树的底部开始查找。
rm -rf
将删除目录中的所有文件(以及其子目录等等...)和所有目录以及其中的所有内容。rmdir *
rmdir * 2> /dev/null
rmdir * 2>/dev/null || true
。(find(1) 的方式对于脚本编写来说更好,但出于其他原因:因为它更好地表达了你想要做的事情。) - Alois Mahdal$HOME
这样做。带着邪恶的笑容。 - Alois Mahdalfind . -type d -empty -delete -maxdepth 1
foo/
的直接子目录。$ tree
.
├── empty_dir1
├── empty_dir2
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
if not f and not s and r != ".":
empty.append(r)
for i in empty:
os.rmdir(i)
/bin/sh
,而且Python实际上比这两者更优雅。 - Sergiy Kolodyazhnyy
rm -rf <directory-name>
。这将删除目录及其所有内容,包括文件和子目录。选项-r
表示递归删除,而选项-f
表示在删除前不提示。然而,如果您想在删除目录/文件之前接收提示信息,请将选项-f
替换为选项-i
。 - Billfind
)的stdout
输入到另一个命令(例如rm
)的stdin
来实现这一点,但是要非常小心,因为它可能会删除你不想删除的文件/目录!有关如何执行此操作的更多信息,请参阅每个命令的man
页面。为了安全起见,在尝试真实操作之前,始终在临时目录中进行测试。 - Bill.DS_Store
的隐藏文件,该文件通常存储该目录的排序/查看偏好设置。其他应用程序可能会添加其他隐藏文件(例如Adobe Bridge可能会添加一个名为.BridgeLabelsAndRatings
的文件),所以这些目录可能并不是真的空的。无论如何,你可以使用命令find . -name '.DS_Store' -delete
来删除.DS_Store
文件,然后再尝试使用建议的命令删除空目录。 - gerlos-depth
选项,find
命令甚至可以匹配并删除那些只因为其所有(空的)子目录被删除而变为空的目录。尝试一下这个命令:mkdir -p a/b/c/d && find a -depth -type d -empty -print -delete
。 - David Foerster