我正在尝试使用 (well) 来比较两个目录的差异diff
。但是,diff
实际上会跟踪符号链接并比较目标文件之间的差异。我似乎找不到不diff
这样做的方法。相反,我想知道的是目标是否相同(或不同)。换句话说,如果符号链接指向同一个文件,(在我看来)它们是相同的,否则它们是不同的,这就是我diff
在递归调用期间遇到符号链接时想要告诉我的全部内容。
我尝试过在线查找,但我要么找到与处理符号链接有关的主题,要么完全忽略它们。
答案1
GNU diff v3.3 引入了--no-dereference
可实现该功能的选项。该选项diff --help
在手册页中有描述,但未提及。
(也可以看看https://stackoverflow.com/a/32026096/301717和https://unix.stackexchange.com/a/151837/72654)
答案2
如果你添加如下行:
dir1/synlinkyfile.txt
config.mk
到文件.ignore-diff
然后你可以diff(1)
像这样执行:
diff -ur -X .ignore-diff
我建议创建一个忽略文件
find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^ File: \`//" | sed s/\'.*// >.ignore-diff
查找子目录中的所有符号链接,获取相关行,对它们进行排序(我喜欢按字母顺序排序),并将其归结为实际上是符号链接的文件的简单文件路径。它完成重定向到 .ignore-diff
当然,也可以先执行 .ignore,然后再次执行相同的搜索,但要删除最后一个 sed,并添加更多的 sed 以删除除目的地之外的所有内容。
find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^ File: \`//" | sed "s/.*-> \`//" | sed "s/'//g" | sed s/\`// > symlinks-dest
对每个目录都执行此操作,然后您可以通过 diff 这两个 symlinks-dest 文件来比较符号链接目标。