如何用Bash命令对比目录中仅行序不同的文件差异
批量验证目录中对应文件是否仅行顺序不同
要批量对比两个目录结构中对应文件排序后是否一致,可以结合find和排序后的diff命令实现,直接遍历所有文件并验证:
核心命令
find folderA -type f -exec sh -c ' fileB="${0/folderA/folderB}" if [ -f "$fileB" ]; then if diff <(sort "$0") <(sort "$fileB") >/dev/null; then echo "无差异: $0 ↔ $fileB" else echo "存在差异: $0 ↔ $fileB" fi else echo "对应文件不存在: $fileB" fi ' {} \;
命令解释
find folderA -type f:遍历folderA下所有普通文件,获取每个文件的完整路径fileB="${0/folderA/folderB}":将当前文件路径中的folderA替换为folderB,得到folderB中对应的文件路径if [ -f "$fileB" ]; then:检查folderB中是否存在对应文件,避免因文件缺失导致报错diff <(sort "$0") <(sort "$fileB") >/dev/null:对两个文件分别排序后对比,将diff的输出重定向到/dev/null,只通过返回值判断是否有差异(返回0表示排序后内容完全一致)- 根据diff的返回值输出结果:排序后一致则提示“无差异”,否则提示“存在差异”
示例验证
结合你给出的目录结构和文件内容:
folderA/folderX/fileX.txt和folderB/folderX/fileX.txt仅行顺序不同,排序后内容一致folderA/folderX/fileY.txt和folderB/folderX/fileY.txt存在内容差异(orangevsblue),排序后仍不一致
执行命令后会输出:
无差异: folderA/folderX/fileX.txt ↔ folderB/folderX/fileX.txt 存在差异: folderA/folderX/fileY.txt ↔ folderB/folderX/fileY.txt
完全符合预期的验证结果。
内容的提问来源于stack exchange,提问作者kabooya
相关产品推荐
相关产品推荐

