You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两个目录中对应文件的命令输出一对一diff对比?

解决对应文件的wgrib2输出一对一diff对比问题

问题场景

需要对两个目录中名称前缀对应的文件(如directory1的file1_serv1对应directory2的file1_serv2),执行wgrib2 -var命令后的输出做一对一diff对比。

现有嵌套循环脚本会遍历所有文件组合,产生非预期的交叉对比结果:

file1_serv1 file1_serv2  
file1_serv1 file2_serv2  
file2_serv1 file1_serv2
file2_serv1 file2_serv2

现有脚本代码:

for i in directory1/*; do
  for j in directory2/*; do
    diff <(wgrib2 -var "$i") <(wgrib2 -var "$j")
  done
done

目录结构:

directory1:         directory2:
file1_serv1         file1_serv2
file2_serv1         file2_serv2

正确实现方法

核心是只匹配同前缀的对应文件,而非遍历所有组合,以下是三种可靠实现方式:

方式一:提取文件名前缀匹配

遍历directory1的文件,提取每个文件的前缀,拼接出directory2中的对应文件路径:

for file in directory1/*; do
    # 提取纯文件名(去掉目录路径)
    filename=$(basename "$file")
    # 截取文件名前缀(去掉末尾的_serv1)
    prefix=${filename%_serv1}
    # 生成对应目录的文件路径
    counterpart="directory2/${prefix}_serv2"
    
    # 检查文件存在性,避免无意义报错
    if [ -f "$counterpart" ]; then
        echo "=== 对比 $file 和 $counterpart ==="
        diff <(wgrib2 -var "$file") <(wgrib2 -var "$counterpart")
    else
        echo "警告:$counterpart 不存在,跳过此对比"
    fi
done

方式二:直接遍历已知前缀列表

如果文件前缀是固定已知的,可直接遍历前缀生成对应文件路径:

for prefix in file1 file2; do
    file1="directory1/${prefix}_serv1"
    file2="directory2/${prefix}_serv2"
    
    if [ -f "$file1" ] && [ -f "$file2" ]; then
        echo "=== 对比 $file1 和 $file2 ==="
        diff <(wgrib2 -var "$file1") <(wgrib2 -var "$file2")
    else
        echo "警告:$file1 或 $file2 不存在,跳过此对比"
    fi
done

方式三:用sed替换文件名后缀

如果文件名后缀规则固定(_serv1和_serv2),可通过sed替换后缀快速匹配对应文件:

for file in directory1/*_serv1; do
    # 替换目录和后缀,得到对应文件路径
    counterpart=$(echo "$file" | sed 's/directory1\///; s/_serv1/_serv2/')
    counterpart="directory2/$counterpart"
    
    if [ -f "$counterpart" ]; then
        echo "=== 对比 $file 和 $counterpart ==="
        diff <(wgrib2 -var "$file") <(wgrib2 -var "$counterpart")
    fi
done

内容的提问来源于stack exchange,提问作者klex52s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:42:43