删除空目录树(删除尽可能多的目录但不删除文件)

gsk*_*lee 15 shell directory rm

假设我有一个这样的目录树:

ROOTDIR
    ?--SUBDIR1
        ?----SUBDIR2
            ?----SUBDIR3
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个命令,当我输入时:

$ [unknown command] ROOTDIR
Run Code Online (Sandbox Code Playgroud)

如果整个目录树中没有文件而只有目录,则可以删除整个目录。但是,假设在 SUBDIR1 下是否有一个名为 hello.pdf 的文件:

ROOTDIR
    ?--SUBDIR1
        ?--hello.pdf
        ?----SUBDIR2
            ?----SUBDIR3
Run Code Online (Sandbox Code Playgroud)

那么该命令只能删除 SUBDIR2 及以下。

小智 28

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

与...一样

find ROOTDIR -type d -depth -empty -exec rmdir "{}" \;
Run Code Online (Sandbox Code Playgroud)

但使用内置的“-delete”操作。

请注意,“-delete”意味着“-depth”。


小智 11

亚历克西斯很近。你需要做的是:

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

这将首先向下钻取目录树,直到找到第一个空目录,然后将其删除。从而使父目录为空,然后将被删除,等等。这将产生预期的效果(我可能每周这样做 10 次,所以我很确定这是正确的)。:-)

  • 考虑一下你是否有一棵树(仅限目录)`foo/bar/baz`。除非你使用`-depth`,它会先尝试删除`foo`,失败,运行后你会得到`foo/bar`。 (4认同)
  • 各位,请在下面寻找 go2null 更简洁的答案!无法理解为什么 SE 在显示问题下方的答案时优先考虑已接受的答案,而不是获得最多赞成票的答案。OP 接受在他选择时可用的最佳答案,但稍后会出现社区赞成的更好的答案,不是吗?(当然,这是元的东西......) (4认同)