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

如何使用bash comm命令获取目录A与B各自独有的文件

你观察到的行前制表符不是输入内容带的,是comm命令本身的输出格式设计:

  • comm默认输出三列内容,列之间用制表符分隔:
    • 第一列:仅在第一个输入流(也就是你A目录的find结果)中存在的行
    • 第二列:仅在第二个输入流(B目录的find结果)中存在的行
    • 第三列:两个输入流共有的行
  • 你加了-3参数,作用是隐藏第三列的公共内容,所以最终输出里,开头带制表符的是第二列内容(仅B目录存在的文件),不带制表符的是第一列内容(仅A目录存在的文件)。

你得到的结果里两组文件名被判定为不同,核心原因是文件名本身就不匹配:你列出来的条目一组后缀是大写的JPG,一组是小写的jpeg,comm是严格逐字符比较的,大小写、后缀的差异都会被识别为不同文件,不是你命令逻辑有误。

如果你的需求是忽略大小写、或忽略后缀差异匹配文件名,可以对find的输出做预处理再比较:

  1. 仅忽略大小写匹配,命令修改为:
comm -3 <(find /Users/rob/A -type f -exec basename {} ';' | tr '[:upper:]' '[:lower:]' | sort) <(find "/Users/rob/B" -type f -exec basename {} ';' | tr '[:upper:]' '[:lower:]' | sort)
  1. 忽略大小写+忽略后缀,仅匹配主文件名:
comm -3 <(find /Users/rob/A -type f -exec basename {} ';' | sed 's/\.[^.]*$//' | tr '[:upper:]' '[:lower:]' | sort) <(find "/Users/rob/B" -type f -exec basename {} ';' | sed 's/\.[^.]*$//' | tr '[:upper:]' '[:lower:]' | sort)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:04