San*_*mar 224 linux filesystems find rm
可能的重复:
如何删除子树中的所有空目录?
我经常创建目录,分散在我的主目录中,我发现很难找到和删除它们。
我想要任何别名/函数/脚本来查找/定位并删除我的主目录中的所有空目录。
Bal*_*ick 420
该find命令是递归文件系统操作的主要工具。使用-type d表达式告诉find您只对查找目录(而不是纯文件)感兴趣。GNU 版本find支持-empty测试,所以
$ find . -type d -empty -print
Run Code Online (Sandbox Code Playgroud)
将打印当前目录下的所有空目录。
使用find ~ -…或find "$HOME" -…根据您的主目录进行搜索(如果它不是您的当前目录)。
在您确认这是选择正确的目录后,使用-delete删除所有匹配项:
$ find . -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)
jor*_*anm 18
您可以调用rmdir每个目录,因为rmdir只有在目录为空时才会删除该目录:
find "$HOME" -type d -exec rmdir {} + 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
如果您还想打印被删除的目录,则需要检查它们是否为空:
find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
这是一个纯 bash 示例(版本 4 或更高版本):
shopt -s globstar
for dir in **/; do
files=("$dir"/*)
[[ ${files[@]} ]] || rmdir -v "$dir"
done
Run Code Online (Sandbox Code Playgroud)