如何从命令行删除目录中的所有空目录?

jus*_*rif 71 command-line delete directory

假设我有一个名为foo/. 此文件夹包括子目录。如何在一个命令中删除所有空目录?

Bil*_*ill 144

试试这个命令:

find . -empty -type d -delete
Run Code Online (Sandbox Code Playgroud)

find命令用于从指定路径搜索与特定搜索条件匹配的文件/目录,在这种情况下是当前目录(因此是.)。

-empty选项适用于任何空文件和目录。

-type d选项适用于指定的文件类型;在这种情况下d代表文件类型目录

-delete选项是要执行的操作,适用于搜索中找到的所有文件。

  • 删除目录的方式,无论它们是否为空,键入以下命令:`rm -rf <directory-name>`。这将删除目录及其所有内容,包括文件和子目录。`-r` 选项表示递归删除,而 `-f` 命令表示删除前不提示。但是,如果您想在删除目录/文件之前得到提示,请将“-f”选项替换为“-i”选项。 (4认同)
  • 可以通过使用管道将一个命令(例如“find”)的“stdout”输入另一个命令(例如“rm”)的“stdin”来实现这一点,但是要非常小心,因为它可能会消失或删除您不想删除的文件/目录!有关如何执行此操作的更多信息,请参阅每个命令的“手册”页。为了安全起见,在尝试真正的东西之前,总是在临时目录中测试这些东西。 (2认同)

wal*_*tor 12

您可以利用该rmdir命令拒绝删除非空目录,以及自find -depth底向上遍历目录树的选项:

find . -depth -exec rmdir {} \;  
Run Code Online (Sandbox Code Playgroud)

(并忽略错误),或附加2>/dev/null以真正忽略它们。

在目录树底部开始查找的-depth选项find

rm -rf将删除所有文件在目录(及其子目录,并....)和所有的目录和一切。


evi*_*oup 9

rmdir *
Run Code Online (Sandbox Code Playgroud)

将删除所有空目录。它会为每个非空目录和文件抛出一个错误,以阻止这些错误使您的终端混乱,请使用

rmdir * 2> /dev/null
Run Code Online (Sandbox Code Playgroud)