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

Linux技巧:如何高效比对目录中同名不同后缀的文件

解决.out与同名.expect文件比对的Shell命令方案

你之前的问题出在变量$i包含了.out后缀,导致拼接后变成了xxx.out.expect,自然找不到正确的文件。下面是几种简单可行的解决办法:

方法一:用Bash参数扩展去掉后缀

直接通过参数扩展截掉.out后缀,这是Bash自带的功能,简洁高效:

for i in *.out; do diff "$i" "${i%.out}.expect"; done

解释:${i%.out}会把变量i末尾的.out部分删除,比如test1.out会变成test1,再加上.expect就得到了对应的test1.expect。

方法二:用basename命令提取文件名

如果记不住参数扩展的写法,用basename命令也能实现,它专门用来提取文件名(去掉路径和指定后缀):

for i in *.out; do
    base=$(basename "$i" .out)
    diff "$i" "$base.expect"
done

解释:basename "$i" .out会返回去掉.out后缀的文件名,比如输入test2.out就返回test2,再拼接.expect即可。

方法三:跳过无对应.expect文件的情况(可选)

如果有些.out文件没有对应的.expect,可以加个判断避免diff报错:

for i in *.out; do
    base="${i%.out}"
    if [ -f "$base.expect" ]; then
        diff "$i" "$base.expect"
    fi
done

这样只有当对应的.expect文件存在时,才会执行diff命令,不会出现"找不到文件"的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:47:04