本文目录导读:

方法1:使用 find 命令(最常用)
#!/bin/bash # 递归删除空目录 find /path/to/directory -type d -empty -delete
参数说明:
-type d:查找目录-empty:匹配空目录-delete:删除找到的空目录
注意: -delete 会先删除最深层的空目录,然后逐级向上删除新变空的目录。
方法2:从最深层开始删除
#!/bin/bash # 从最深层目录开始删除 find /path/to/directory -depth -type d -empty -delete
-depth 确保先处理子目录,再处理父目录。
方法3:使用 rmdir 命令
#!/bin/bash
# 使用 rmdir 删除空目录
find /path/to/directory -type d -empty -exec rmdir {} \;
方法4:多次执行直到没有空目录
#!/bin/bash
target_dir="/path/to/directory"
# 循环删除直到没有空目录
while find "$target_dir" -type d -empty | grep -q .; do
find "$target_dir" -type d -empty -delete
done
方法5:更安全的版本(带日志和确认)
#!/bin/bash
target_dir="${1:-/tmp}" # 默认删除 /tmp 下的空目录
# 函数:递归删除空目录
clean_empty_dirs() {
local dir="$1"
# 先处理子目录
find "$dir" -depth -type d -empty -print -delete 2>/dev/null
# 检查是否还有空目录
if find "$dir" -type d -empty 2>/dev/null | grep -q .; then
echo "仍有空目录,继续清理..."
clean_empty_dirs "$dir"
fi
}
echo "开始清理空目录: $target_dir"
echo "删除的空目录:"
clean_empty_dirs "$target_dir"
echo "清理完成"
完整脚本示例
#!/bin/bash
# 用法: ./clean_empty_dirs.sh [目录路径]
# 设置目标目录
TARGET_DIR="${1:-.}" # 默认为当前目录
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 '$TARGET_DIR' 不存在"
exit 1
fi
# 转换为绝对路径
TARGET_DIR=$(cd "$TARGET_DIR" && pwd)
echo "开始清理空目录: $TARGET_DIR"
echo "------------------------"
# 统计初始空目录数量
initial_count=$(find "$TARGET_DIR" -type d -empty | wc -l)
echo "初始空目录数量: $initial_count"
# 执行删除操作
find "$TARGET_DIR" -depth -type d -empty -delete 2>/dev/null
# 检查结果
final_count=$(find "$TARGET_DIR" -type d -empty 2>/dev/null | wc -l)
deleted_count=$((initial_count - final_count))
echo "已删除空目录: $deleted_count"
echo "剩余空目录: $final_count"
echo "------------------------"
echo "清理完成!"
实际使用示例
# 删除 /tmp 下的空目录 ./clean_empty_dirs.sh /tmp # 删除当前目录下的空目录 ./clean_empty_dirs.sh # 删除指定目录下的空目录 ./clean_empty_dirs.sh /var/log
注意事项
- 权限问题:确保有足够的权限删除目录
- 安全考虑:建议先在测试目录测试
- 已挂载目录:注意不要删除挂载点空目录
- 系统目录:不要随意清理系统关键目录
选择哪种方法取决于你的具体需求,方法1最简单,方法2更彻底(从最深层开始),方法5适合生产环境使用。