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
相关产品推荐
相关产品推荐

