linux_batch_del_dir
Linux 批量递归删除目录
一键脚本
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/linux_batch_del_dir.sh) /vol2/1000/media data
| 功能模式 | 执行命令 | 作用说明 |
|---|---|---|
| 传参快速执行 | ./del_dir.sh /扫描根目录 目标目录名 |
直接指定路径与名称,批量递归查找并强制删除 |
| 实用示例 | ./del_dir.sh /data node_modules |
删除 /data 目录下所有 node_modules 文件夹 |
| 实用示例 | ./del_dir.sh /www logs |
删除 /www 目录下所有 logs 文件夹 |
| 交互式执行 | ./del_dir.sh |
无参数运行,手动输入扫描目录、删除目录名 |
| 删除规则 | - | 先预览所有匹配目录,确认后使用rm -rf彻底删除 |
效果预览
补充说明
该脚本用于批量递归删除指定目录下的特定名称文件夹,支持交互式或参数传入,删除前会预览并二次确认,适合清理项目中的临时目录(如 node_modules、.git 等)的场景。
功能特点
- 批量删除:递归扫描并删除所有匹配名称的目录
- 交互式确认:删除前预览所有待删除目录,需二次确认
- 支持传参:可直接传入扫描路径和目标目录名
- 安全保护:删除前显示完整列表,避免误删重要文件
- 强制删除:使用
rm -rf强制删除,无法恢复
使用方法
# 交互式操作(会提示输入扫描路径和目录名)
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/linux_batch_del_dir.sh)
# 直接传参:扫描路径 + 目录名
bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/linux_batch_del_dir.sh) /vol2/1000/media data
注意事项
- 删除操作无法恢复,请谨慎操作
- 删除前务必仔细检查预览列表
- 需要对待删除目录有写权限
- 建议先在不重要的目录测试脚本
- 常见清理目标:node_modules、.git、pycache、vendor 等
脚本源码
#!/bin/bash
set -euo pipefail
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export reset=$'\033[0m'
}
list_color_init
log_info() { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok() { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_warn() { echo -e "${gl_huang}[警告]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }
break_end() {
echo -e "${gl_lv}操作完成${gl_bai}"
echo -e "${gl_bai}按任意键继续 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai} \c"
read -r -n 1 -s -p ""
echo ""
clear
}
clear
echo -e "${gl_zi}>>> 批量删除指定目录工具${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
if [[ -n "${1:-}" ]]; then
SCAN_DIR="$1"
else
read -r -e -p "$(echo -e "${gl_bai}请输入要扫描的目录路径: ")" SCAN_DIR
fi
if [[ -n "${2:-}" ]]; then
DEL_DIR="$2"
else
read -r -e -p "$(echo -e "${gl_bai}请输入要删除的文件夹名称: ")" DEL_DIR
fi
echo -e ""
log_info "开始扫描目录: ${gl_huang}${SCAN_DIR}${gl_bai}"
log_info "要删除的文件夹: ${gl_lv}${DEL_DIR}${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
log_info "正在扫描并预览匹配项 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
mapfile -t RESULT < <(find "${SCAN_DIR}" -type d -name "${DEL_DIR}" 2>/dev/null)
COUNT=${#RESULT[@]}
if [[ ${COUNT} -eq 0 ]]; then
log_warn "未找到任何匹配的 ${DEL_DIR} 目录"
break_end
exit 0
fi
for line in "${RESULT[@]}"; do
echo -e "${gl_bai}${line}"
done
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
log_ok "扫描完成,共找到 ${gl_hong}${COUNT}${gl_bai} 个目标目录"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
read -r -e -p "$(echo -e "${gl_bai}确定删除以上所有目录?(${gl_lv}y${gl_bai}/${gl_hong}N${gl_bai}): ")" choice
case "${choice}" in
[Yy])
log_warn "正在删除,请稍候 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
# 修复:使用 rm -rf 递归强制删除非空目录,替代无法删除非空目录的 find -delete
for dir in "${RESULT[@]}"; do
rm -rf "${dir}" && log_info "已删除: ${dir}"
done
log_ok "删除完成,共删除 ${COUNT} 个目录"
;;
[Nn]|*)
log_warn "已取消删除操作"
;;
esac
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
创建本地脚本
new_script="new_test.sh"
cat > "$new_script" << 'EOF'
#!/bin/bash
# 粘贴脚本源码
EOF
# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"
相关命令
- linux_batch_del_file
- linux_batch_del_dir 👈 当前所在位置