如何删除所有空目录


11

(在Linux系统上)

我在文件系统上有大量的嵌套子目录。我想修剪所有根本不包含文件的所有目录路径。

换句话说,我要递归删除该目录或该目录的任何子目录中没有文件的每个目录。

Answers:


15

对于所有版本的find

find -depth -type d -empty -exec rmdir {} \;

如果您有较新的版本

 find -type d -empty -delete

很酷,不知道-delete标志。
2011年

我也不。我学到新东西。我之前已经编写了脚本,使用递归来查找空目录。这大大简化了该任务。
詹姆斯

2
ya -empty标志在这里确实有帮助。如果您不包含-type d或仅使用-type f,它也可以查找空文件
麦克

1

可能不是最好的解决方案,但是此脚本有效:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(部分基于列出所有空文件夹的答案)


1
我刚刚想到,如果您无权删除任何空目录,这将陷入无限循环,因此请改用接受的答案:)
AndrewR 2011年

0
for i in `find -type d -empty`; do rmdir $i; done

关闭,但没有雪茄。您缺少删除目录导致其父目录变为空的情况。
西蒙·里希特

确实如此。我会find在第二轮他们。从未有过这种情况。
ansi_lumen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.