Linux中可用diff命令递归比较目录差异:①基础用diff -r;②简化输出加-sBb选项;③grep过滤关键行;④--exclude排除指定文件;⑤-ruN生成统一格式并保存。

如果您需要在Linux系统中快速识别两个文件夹之间的内容差异,可以利用diff命令的递归功能直接对比目录结构与文件内容。以下是使用diff工具完成此任务的具体步骤:
一、基础递归比较
该方法通过diff的-r选项启用递归模式,逐层遍历两个目录下的所有子目录和文件,并输出差异信息。它能显示哪些文件仅存在于某一方,或哪些文件内容不一致。
1、打开终端,切换到包含待比较目录的父路径下。
2、执行命令:diff -r /path/to/dir1 /path/to/dir2。
3、观察输出:以“Only in”开头的行表示某目录独有文件;以“Files ... differ”开头的行表示同名文件内容不同。
二、简化输出并忽略空白差异
该方法在基础递归比较上增加-s(显示相同文件)、B(忽略空行变化)、b(忽略空白字符数量变化)等选项,使结果更聚焦于实质性差异,减少格式类干扰。
1、确保两个目录路径准确无误,且当前用户具有读取权限。
2、运行命令:diff -rsBb /path/to/dir1 /path/to/dir2。
3、注意输出中“Files ... and ... differ”仍表示内容不同,“Files ... and ... are identical”表示完全一致,“Only in”仍标识单边存在文件。
三、生成可读性更强的摘要式差异报告
该方法结合diff与grep筛选,仅提取关键差异线索,过滤掉冗长的逐行比对内容,适用于快速判断是否需深入检查。
1、在终端中输入完整命令:diff -r /path/to/dir1 /path/to/dir2 | grep -E "^Only|^differ$"。
2、确认管道符“|”前后无多余空格,grep参数-E启用扩展正则匹配。
3、输出将只保留“Only in dirX”和“... differ”两类关键行,便于人工扫描。
四、排除特定类型文件或目录
该方法利用diff的--exclude选项跳过指定名称模式的条目,例如忽略.git、__pycache__、临时文件等,避免噪声干扰核心差异判断。
1、确定需排除的项目名称或通配模式,如“*.log”、“node_modules”、“.DS_Store”。
2、构造命令:diff -r --exclude='*.log' --exclude='node_modules' /path/to/dir1 /path/to/dir2。
3、多个--exclude可连续添加,每个后接单引号包裹的模式字符串。
五、以统一格式输出差异并保存至文件
该方法使用-u选项生成统一格式(unified format)差异输出,结构清晰、兼容性强,适合存档或后续用patch工具应用修改。
1、确保目标保存路径具有写入权限。
2、执行命令:diff -ruN /path/to/dir1 /path/to/dir2 > diff_report.txt。
3、-N参数将缺失文件视为空文件参与比较,避免因一方缺少文件而跳过差异计算。










