本文目录导读:

在 Linux/macOS 系统中,可以使用以下脚本批量删除空目录:
使用 find 命令(推荐)
Linux/macOS 基本命令
# 删除当前目录及子目录下的所有空目录 find . -type d -empty -delete # 先查看哪些目录会被删除(安全模式) find . -type d -empty -print
更安全的版本(先预览再删除)
# 预览空目录
find /path/to/target -type d -empty > empty_dirs.txt
# 检查确认后删除
cat empty_dirs.txt | xargs -I {} rm -d {}
# 或使用
cat empty_dirs.txt | xargs rmdir
使用 Bash 脚本
递归删除空目录
#!/bin/bash
# 脚本:remove_empty_dirs.sh
target_dir="${1:-.}" # 默认为当前目录
# 反复删除空目录,直到没有空目录为止
while IFS= read -r -d '' dir; do
rmdir "$dir" 2>/dev/null
done < <(find "$target_dir" -type d -empty -print0)
带日志的版本
#!/bin/bash
target_dir="${1:-.}"
log_file="removed_dirs_$(date +%Y%m%d_%H%M%S).log"
echo "开始删除空目录: $(date)" > "$log_file"
count=0
while IFS= read -r -d '' dir; do
if rmdir "$dir" 2>/dev/null; then
echo "删除: $dir" >> "$log_file"
((count++))
fi
done < <(find "$target_dir" -type d -empty -print0)
echo "完成删除 $count 个空目录"
echo "日志已保存到: $log_file"
Windows PowerShell
Windows 系统中删除空目录
# 递归删除所有空目录
Get-ChildItem -Path "C:\your\path" -Recurse -Directory |
Where-Object { $_.GetFileSystemInfos().Count -eq 0 } |
Remove-Item -Verbose
# 带确认的版本
Get-ChildItem -Path "C:\your\path" -Recurse -Directory |
Where-Object { $_.GetFileSystemInfos().Count -eq 0 } |
Select-Object FullName |
Out-File -FilePath "empty_dirs.txt"
# 然后检查文件后手动删除
高级用法
删除特定层级的空目录
# 只删除深度为2的空目录(不递归到更深的子目录) find . -maxdepth 2 -type d -empty -delete
排除特定目录
# 排除 .git 目录 find . -type d -empty -not -path "./.git/*" -delete
删除空目录并保留隐藏目录
# 删除非隐藏空目录,保留隐藏目录 find . -type d -empty -not -name ".*" -delete
安全建议
- 先预览再删除:总是先用
-print或-ls选项查看 - 创建备份:删除前考虑创建目录列表备份
- 从测试目录开始:先在测试目录测试脚本
- 检查删除结果:删除后重新运行命令确认
最安全的方式是先使用:
find /path/to/target -type d -empty -print | less
确认无误后再执行删除操作。