如何用Bash条件语句实现x.txt跨多目录全文件内容一致性比对
Bash 批量文件内容比对实现方案
场景适配说明
完全匹配现有路径规则:基准文件固定为/home/folder-1/x.txt,待扫描目录为无嵌套子目录的/home/folder-2、/home/folder-3,比对规则完全沿用已知的cmp -s逻辑——仅校验文件实际内容,不校验文件名、文件大小。
可落地实现代码
# 定义固定基准文件路径 BASE_FILE="/home/folder-1/x.txt" # 配置待扫描的目标目录列表 SCAN_DIRS=("/home/folder-2" "/home/folder-3") # 前置校验:确认基准文件存在且为普通文件,避免空跑 if [ ! -f "$BASE_FILE" ]; then echo "执行中断:基准文件 $BASE_FILE 不存在或不是有效普通文件" exit 1 fi # 重复文件命中标记 DUP_FLAG=0 # 逐目录遍历 for scan_dir in "${SCAN_DIRS[@]}"; do # 匹配目录下顶层所有条目(因目录无嵌套,无需递归遍历) for target_item in "$scan_dir"/*; do # 跳过非普通文件条目(如空目录下的通配符匹配残留) if [ ! -f "$target_item" ]; then continue fi # 逐文件执行cmp内容比对 if cmp -s "$BASE_FILE" "$target_item"; then echo "命中与基准文件内容完全一致的文件:$target_item" DUP_FLAG=1 # 命中后直接跳出两层循环,无需遍历剩余文件 break 2 fi done done # 分支逻辑触发 if [ $DUP_FLAG -eq 1 ]; then echo "进入重复文件命中的自定义流程分支" # 此处替换为需要执行的自定义命令、操作 else echo "扫描完成:两个目标目录下未找到与基准文件内容一致的文件" fi
实现逻辑关键点
- 无需硬编码单个文件路径:自动遍历两个目录下的所有零散文件,减少人工逐对写比对逻辑的冗余操作
- 异常兜底:处理目录为空时通配符无法匹配文件的边界场景,避免把目录路径本身传入
cmp导致命令报错 - 性能优化:命中第一个匹配文件后直接终止遍历,无需无意义扫描剩余文件
- 规则对齐:全程使用
cmp -s执行内容比对,和原有基础比对逻辑的校验规则完全一致,不会出现校验标准偏差
内容的提问来源于stack exchange,提问作者7beggars_nnnnm
相关产品推荐
相关产品推荐

