Bash中遍历两个目录按序传递配对文件给Python比较脚本的实现方法
双目录配对文件遍历Shell实现方案
方案1:序号循环方案(适配你当前file00~file49的命名规则,最稳定)
这个方案完全匹配你要求的按序号配对逻辑,不会出现乱序问题:
#!/bin/bash # 请修改以下三个路径为你的实际路径 DIR1="./dir1" DIR2="./dir2" PY_COMPARE_SCRIPT="./your_compare.py" # 循环00到49,自动生成两位补零的序号 for seq in {00..49}; do target_file1="${DIR1}/file${seq}" target_file2="${DIR2}/file${seq}" # 校验两个文件都存在再执行对比,避免传入无效参数 if [[ -f "${target_file1}" && -f "${target_file2}" ]]; then echo "正在对比:${target_file1} | ${target_file2}" python3 "${PY_COMPARE_SCRIPT}" "${target_file1}" "${target_file2}" else echo "跳过序号${seq}:存在配对文件缺失" fi done
注意:如果后续文件数量变化,直接修改{00..49}的起止序号即可
方案2:通用排序配对方案(适用于文件名不固定的场景)
如果两个目录下的文件名不是固定的序号格式,仅需要按字典序排序后一一配对,可以用这个方案:
#!/bin/bash DIR1="./dir1" DIR2="./dir2" PY_COMPARE_SCRIPT="./your_compare.py" # 将两个目录下的文件排序后分别存入数组 mapfile -t files_dir1 < <(ls -1 "${DIR1}" | sort) mapfile -t files_dir2 < <(ls -1 "${DIR2}" | sort) # 先校验文件数量是否匹配 if [[ ${#files_dir1[@]} -ne ${#files_dir2[@]} ]]; then echo "错误:两个目录文件数量不一致,无法完成配对" exit 1 fi # 按下标配对文件 for index in "${!files_dir1[@]}"; do target_file1="${DIR1}/${files_dir1[$index]}" target_file2="${DIR2}/${files_dir2[$index]}" echo "正在对比:${target_file1} | ${target_file2}" python3 "${PY_COMPARE_SCRIPT}" "${target_file1}" "${target_file2}" done
使用步骤
- 将对应方案的代码保存为
run_compare.sh文件 - 修改文件开头的三个路径参数为你本地的实际路径
- 给脚本添加执行权限:
chmod +x run_compare.sh - 执行脚本即可批量完成配对对比:
./run_compare.sh
内容的提问来源于stack exchange,提问作者SHA
相关产品推荐
相关产品推荐

