当前位置: 首页 > news >正文

实用教程:打造支持参数配置的 Git Bash 文件清理脚本

实用教程:打造支持参数配置的Git Bash文件清理脚本

开发时,我们经常需要清理指定目录下的临时文件、日志文件或 dump 文件等。手动删除不仅繁琐,还容易误删重要文件。今天就来教大家打造一个支持参数传入、带安全校验、可灵活配置的Git Bash文件清理脚本,轻松解决文件清理难题。
在这里插入图片描述
在这里插入图片描述

一、脚本核心特性

本次开发的清理脚本具备以下实用特性,兼顾安全性和灵活性:

  • ✅ 支持Windows路径格式(如 /c/windows/dump*.dump)和通配符匹配
  • ✅ 可通过命令行参数配置「模拟执行」和「删除确认」(不传入则使用默认值)
  • ✅ 自动校验文件存在性,避免删除不存在的文件
  • ✅ 友好的日志输出,清晰展示删除进度和结果
  • ✅ 支持多路径同时清理,处理含空格的文件路径
  • ✅ 安全防护:默认开启删除确认,防止误操作

二、完整脚本代码

将以下代码保存为 clean_files.sh(建议放在用户目录 ~/ 下,方便全局调用):

#!/bin/bash# 清理指定目录文件的 Git Bash 脚本(Windows 最终版)
# 核心:手动指定你的 Git 命令实际路径,100% 匹配
# 解决:命令路径不匹配、PATH污染、文件不换行、权限不足等所有问题
# 用法:./clean_files.sh [选项] <目标文件路径>##############################################################################
# 关键配置:手动填写你的 Git 命令路径(已根据你的环境填写)
##############################################################################
# 你的 Git 实际路径:C:\Program Files\Git\usr\bin
# 对应 Git Bash 虚拟路径:/c/Program Files/Git/usr/bin/
GIT_BIN_PATH="/c/Program Files/Git/usr/bin"
# 拼接命令路径(带 .exe 后缀,Windows 必需)
RM_CMD="$GIT_BIN_PATH/rm.exe"
DATE_CMD="$GIT_BIN_PATH/date.exe"# shopt 是 Bash 内置命令,无需路径
SHOPT_CMD="shopt"##############################################################################
# 基础配置(无需修改)
##############################################################################
DRY_RUN=0             # 1=模拟执行(只显示不删除),0=实际执行
NEED_CONFIRM=1        # 1=需要确认,0=直接删除
FILE_COUNT=0          # 统计匹配文件总数
MATCHED_FILES=()      # 存储匹配文件路径##############################################################################
# 函数:显示帮助信息
##############################################################################
show_help() {echo "========================================"echo "  Windows Git Bash 文件清理脚本 v1.9(最终完美版)"echo "========================================"echo "  特性:手动指定 Git 命令路径,完全匹配你的环境"echo "  当前 Git 命令路径:$GIT_BIN_PATH"echo "  支持:Windows路径(/c/...)、通配符、含空格路径"echo "  用法:$0 [选项] <目标文件路径>"echo "  "echo "  选项说明:"echo "    --dry-run        模拟执行(仅预览,不删除)"echo "    --no-dry-run     实际执行删除(默认)"echo "    --confirm        删除前确认(默认)"echo "    --no-confirm     无需确认,直接删除"echo "    -h/--help        显示帮助信息"echo "  "echo "  示例用法:"echo "    $0 --dry-run /c/Windows/Temp/dump*.dmp"echo "    $0 --no-confirm /d/data/*.log"echo "========================================"
}##############################################################################
# 函数:解析命令行参数(Bash 内置)
##############################################################################
parse_args() {TARGET_PATHS=()for ARG in "$@"; docase "$ARG" in--dry-run)DRY_RUN=1;;--no-dry-run)DRY_RUN=0;;--confirm)NEED_CONFIRM=1;;--no-confirm)NEED_CONFIRM=0;;-h|--help)show_helpexit 0;;*)TARGET_PATHS+=("$ARG");;esacdone# 校验目标路径参数if [ ${#TARGET_PATHS[@]} -eq 0 ]; thenecho "❌ 错误:未传入目标文件路径参数"show_helpexit 1fi
}##############################################################################
# 函数:匹配文件并存储(纯 Bash 内置)
##############################################################################
match_files() {MATCHED_FILES=()FILE_COUNT=0# 开启 nullglob,处理通配符$SHOPT_CMD -s nullglobfor PATH in "${TARGET_PATHS[@]}"; dofor FILE in "$PATH"; do# 确认是文件if [ -f "$FILE" ]; thenMATCHED_FILES+=("$FILE")((FILE_COUNT++))fidonedone$SHOPT_CMD -u nullglob# 无匹配文件退出if [ $FILE_COUNT -eq 0 ]; thenecho "ℹ️  没有找到匹配的文件:${TARGET_PATHS[*]}"exit 0fi
}##############################################################################
# 函数:强制换行显示文件列表
##############################################################################
show_matched_files() {echo -e "\n⚠️  已匹配以下 $FILE_COUNT 个文件(强制每行一个):"for FILE in "${MATCHED_FILES[@]}"; doecho "  - $FILE"doneecho -e "\nℹ️  执行配置:"echo "  - 模拟执行:$( [ $DRY_RUN -eq 1 ] && echo "✅ 是" || echo "❌ 否" )"echo "  - 需要确认:$( [ $NEED_CONFIRM -eq 1 ] && echo "✅ 是" || echo "❌ 否" )"echo "  - rm 命令路径:$RM_CMD"echo "  - 命令是否存在:$( [ -f "$RM_CMD" ] && echo "✅ 存在" || echo "❌ 不存在" )"echo
}##############################################################################
# 函数:确认删除操作
##############################################################################
confirm_delete() {if [ $NEED_CONFIRM -eq 1 ]; thenread -p "❓ 确定要执行上述操作吗?(y/N) " CONFIRMif [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; thenecho "✅ 操作已取消"exit 0fifi
}##############################################################################
# 函数:执行删除操作(最终匹配你的环境)
##############################################################################
execute_delete() {# 先检查 rm 命令是否存在if [ ! -f "$RM_CMD" ]; thenecho "❌ 错误:rm 命令路径不存在,请检查 GIT_BIN_PATH 配置"echo "  当前配置路径:$GIT_BIN_PATH"echo "  正确路径应为:你的 Git 安装目录下的 usr/bin(如 /c/Program Files/Git/usr/bin)"exit 1fiif [ $DRY_RUN -eq 1 ]; thenecho "ℹ️  模拟执行完成(未实际删除任何文件)"returnfiecho "🗑️  开始删除文件(每行一个结果)..."SUCCESS_COUNT=0FAIL_COUNT=0# 使用手动指定的 rm 命令路径删除for FILE in "${MATCHED_FILES[@]}"; do"$RM_CMD" -f "$FILE"if [ $? -eq 0 ]; thenecho "  ✅ 已删除:$FILE"((SUCCESS_COUNT++))elseecho "  ❌ 删除失败:$FILE"echo "      原因:未以管理员身份运行 Git Bash!"echo "      解决:右键 Git Bash → 以管理员身份运行 → 重新执行脚本"((FAIL_COUNT++))fidoneecho -e "\n🎉 操作完成!"echo "  - 成功删除:$SUCCESS_COUNT 个文件"echo "  - 删除失败:$FAIL_COUNT 个文件"echo "  - 总匹配文件:$FILE_COUNT 个"
}##############################################################################
# 主执行流程
##############################################################################
main() {# 显示当前时间if [ -f "$DATE_CMD" ]; thenCURRENT_TIME=$("$DATE_CMD" +'%Y-%m-%d %H:%M:%S')elseCURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')fiecho "========================================"echo "  Windows Git Bash 文件清理工具"echo "  执行时间:$CURRENT_TIME"echo "  Git 命令路径:$GIT_BIN_PATH"echo "========================================"# 1. 解析参数parse_args "$@"# 2. 匹配文件match_files# 3. 显示文件列表show_matched_files# 4. 确认删除confirm_delete# 5. 执行删除execute_delete
}# 启动主流程
main "$@"

三、脚本使用步骤

1. 准备工作:添加执行权限

打开Git Bash,进入脚本所在目录(如用户目录 ~/),执行以下命令添加执行权限:

chmod +x ~/clean_files.sh

2. 基础使用示例

脚本支持多种场景的文件清理,以下是最常用的几个示例:

示例1:默认配置清理(需确认+实际删除)

清理 C:\windows 目录下所有 .dump 文件(Git Bash中Windows路径需写为 /c/windows/):

~/clean_files.sh /c/windows/dump*.dump

执行后会先显示匹配的文件列表,然后提示确认,确认后才会实际删除。

示例2:模拟执行(预览删除列表)

想先看看会删除哪些文件,不实际执行删除操作,使用 --dry-run 参数:

~/clean_files.sh --dry-run /d/data/*.log

执行后只会显示待删除文件列表和配置,不会删除任何文件,适合风险校验。

示例3:直接删除(无需确认)

对于确定要删除的文件,可使用 --no-confirm 参数跳过确认步骤:

~/clean_files.sh --no-confirm ~/project/*.tmp
示例4:多路径同时清理

同时清理多个目录下的文件,用空格分隔路径即可:

~/clean_files.sh /c/temp/*.log /d/docs/*.old ~/downloads/*.zip
示例5:处理含空格的路径

如果文件路径包含空格,需要用引号包裹路径:

~/clean_files.sh --no-confirm "/c/Program Files/*.log"

3. 选项参数组合使用

脚本支持多个选项参数组合,满足更灵活的需求:

# 模拟执行 + 无需确认(快速预览删除列表)
~/clean_files.sh --dry-run --no-confirm *.log# 实际执行 + 强制确认(即使默认已开启确认,显式指定更清晰)
~/clean_files.sh --no-dry-run --confirm /c/windows/dump*.dump

四、脚本核心逻辑解析

1. 参数解析机制

脚本通过 parse_args 函数解析命令行参数,区分「选项参数」(如 --dry-run)和「路径参数」,未传入选项时使用默认配置(DRY_RUN=0NEED_CONFIRM=1)。

2. 安全校验逻辑

  • 文件存在性校验:通过 find 命令查找匹配文件,排除目录,避免删除文件夹
  • 权限错误忽略2>/dev/null 屏蔽权限不足的错误提示,不影响脚本执行
  • 空匹配处理:未找到匹配文件时友好提示并退出,不执行后续操作

3. 执行流程控制

脚本执行流程清晰,按「解析参数→校验文件→显示列表→确认操作→执行删除」逐步推进,每个步骤都有明确的日志输出,方便排查问题。

五、进阶技巧:定制与扩展

1. 修改默认配置

如果经常使用某类配置,可直接修改脚本开头的默认配置:

# 例如:默认开启模拟执行,默认无需确认
DRY_RUN=1
NEED_CONFIRM=0

2. 添加全局调用

将脚本所在目录添加到环境变量,即可在任意目录下直接执行 clean_files.sh,无需输入路径:

# 编辑环境变量配置文件
vi ~/.bashrc
# 添加以下内容(假设脚本在 ~/ 目录)
export PATH="$PATH:~/"
# 生效配置
source ~/.bashrc

之后在任意目录下可直接执行:

clean_files.sh --dry-run /c/windows/dump*.dump

3. 扩展功能:添加日志保存

如果需要记录删除日志,可修改 execute_delete 函数,将输出重定向到日志文件:

# 在 execute_delete 函数开头添加日志文件路径
LOG_FILE="clean_log_$(date +'%Y%m%d_%H%M%S').log"
# 执行删除时同时写入日志
rm -f "$FILE" 2>&1 | tee -a "$LOG_FILE"

六、注意事项

  1. 谨慎使用通配符:尤其是 /* 等大范围匹配,建议先使用 --dry-run 预览匹配结果
  2. 管理员权限:删除系统目录(如 C:\windows)文件时,需以管理员身份运行Git Bash
  3. 路径格式:Git Bash中Windows路径需使用 /c//d/ 格式,而非 C:\D:\
  4. 重要文件备份:清理前建议备份重要文件,避免误删无法恢复
http://www.dtcms.com/a/593521.html

相关文章:

  • 长短期记忆网络(LSTM)入门
  • 图——关键路径
  • 中国建设银行广西分行网站首页24小时在线观看
  • wordpress 下载网站加盟网站推广
  • Pycharm社区版安装
  • 每日算法(1)
  • 基于PLC的多级传送带控制与改造
  • 网站建设案例知名 乐云践新广州市专业网站设计
  • 数字货币众筹网站开发创意设计公司官网
  • requst payload和query string parameters
  • Web网页之前端三剑客汇总篇(基础版)
  • 【AI学习-comfyUI学习-简易加载器抠图工作流(替换抠图节点版)-各个部分学习-第七节】
  • Linux中自定义服务开机自启nginx
  • 【Linux】snakemake应用之扩增子分析流程
  • 可以做哪些网站有哪些内容给别人做的网站要复杂做安全扫描
  • vue中回显word、Excel、txt、markdown文件
  • [吾爱大神原创] 自用 图片叠加 批量图片转PDF工具 [牛马工具]
  • 微信小程序开发案例 | 幸运抽签小程序(上)
  • GEAR:一种高效的 KV Cache 压缩方法,用于几乎无损的大语言模型生成式推理
  • 西樵网站建设公司wordpress 宠物
  • Bootstrap5 表格深度解析
  • abuild 命令行工程编译
  • python自动化005:app自动化入门环境搭建
  • 云南品牌网站开发番禺建设网站开发
  • HarmonyOS:线性布局(Row/Column)
  • 鸿蒙Next学习解析之针对PC2in1设备的窗口管理新增支持主窗的尺寸记忆功能
  • 【大数据技术02】统计学和模型
  • Python数据挖掘之回归
  • 数据管理技术发展的3个阶段
  • 进网站后台显示空白购买东西网站怎么做