如何用脚本批量删除空目录?

wen 实用脚本 3

本文目录导读:

如何用脚本批量删除空目录?

  1. 方法一:使用 find 命令(推荐)
  2. 方法二:使用 Bash 脚本
  3. 方法三:Windows PowerShell
  4. 高级用法
  5. 安全建议

在 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

安全建议

  1. 先预览再删除:总是先用 -print-ls 选项查看
  2. 创建备份:删除前考虑创建目录列表备份
  3. 从测试目录开始:先在测试目录测试脚本
  4. 检查删除结果:删除后重新运行命令确认

最安全的方式是先使用:

find /path/to/target -type d -empty -print | less

确认无误后再执行删除操作。

抱歉,评论功能暂时关闭!