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

Mac下如何仅通过文件名对比目录间差异(无需内容比对)

仅对比文件名的目录差异方案(Mac)

方法1:原生命令组合(无需额外工具)

用find+sort+diff的组合,只提取并对比文件/目录路径,完全不读取文件内容,速度远快于默认的diff -rq。

仅对比文件

diff <(find /dir1 -type f | sort) <(find /dir2 -type f | sort)

同时对比文件和目录

去掉-type f参数即可:

diff <(find /dir1 | sort) <(find /dir2 | sort)

原理:<()是bash进程替换,将find的输出作为临时输入传给diff,sort确保路径顺序一致,让diff能准确识别差异。

方法2:用rsync快速检测

rsync本身是同步工具,但借助参数可以仅输出文件名差异,速度极快(默认只对比元数据,不碰文件内容)。

rsync -avn --delete /dir1/ /dir2/

参数说明:

  • -a:归档模式,递归遍历并保留文件属性
  • -v:显示详细输出
  • -n:模拟运行,仅输出差异,不修改任何文件
  • --delete:额外显示dir2中存在但dir1没有的内容(不需要可去掉)

输出标识:

  • > 开头:仅在dir2存在的文件/目录
  • < 开头:仅在dir1存在的文件/目录

方法3:自定义脚本(结构化输出)

如果需要更清晰的分类展示(比如单独列出两边独有的内容),可以用以下脚本:

创建dir-compare.sh文件:

#!/bin/bash

if [ $# -ne 2 ]; then
    echo "用法: $0 <目录1> <目录2>"
    exit 1
fi

DIR1="$1"
DIR2="$2"

# 生成相对路径的文件列表
cd "$DIR1" && find . | sort > /tmp/dir1_list.txt
cd "$DIR2" && find . | sort > /tmp/dir2_list.txt

echo "=== 仅在 $DIR1 存在的文件/目录 ==="
grep -Fxvf /tmp/dir2_list.txt /tmp/dir1_list.txt

echo -e "\n=== 仅在 $DIR2 存在的文件/目录 ==="
grep -Fxvf /tmp/dir1_list.txt /tmp/dir2_list.txt

# 清理临时文件
rm /tmp/dir1_list.txt /tmp/dir2_list.txt

添加执行权限并运行:

chmod +x dir-compare.sh
./dir-compare.sh /dir1 /dir2

脚本用grep -Fxvf提取两个列表的差集,输出结构更直观,适合快速定位独有的内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:20:59