答案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