如何递归删除主目录中的空目录?

如何递归删除主目录中的空目录?

可能的重复:
如何删除子树中的所有空目录?

我经常创建目录,这些目录分散在我的主目录中,并且我发现很难找到并删除它们。

我想要任何别名/函数/脚本来查找/定位并删除我的主目录中的所有空目录。

答案1

find命令是递归文件系统操作的主要工具。使用-type d表达式告诉find您只对查找目录(而不是普通文件)感兴趣。 GNU版本find支持-empty测试,所以

$ find . -type d -empty -print

将打印当前目录下的所有空目录。

使用find ~ -…find "$HOME" -…根据您的主目录进行搜索(如果它不是您的当前目录)。

确认选择了正确的目录后,使用-delete删除所有匹配项:

$ find . -type d -empty -delete

答案2

您可以调用rmdir每个目录,因为rmdir只会删除空目录:

find "$HOME" -type d -exec rmdir {} + 2>/dev/null

如果您还想打印正在删除的目录,则需要检查它们是否为空:

find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \; 

这是一个纯 bash 示例(版本 4 或更高版本):

shopt -s globstar
for dir in **/; do
   files=("$dir"/*)
   [[ ${files[@]} ]] || rmdir -v "$dir"
done

相关内容