递归差异和符号链接

递归差异和符号链接

我正在尝试使用 (well) 来比较两个目录的差异diff。但是,diff实际上会跟踪符号链接并比较目标文件之间的差异。我似乎找不到不diff这样做的方法。相反,我想知道的是目标是否相同(或不同)。换句话说,如果符号链接指向同一个文件,(在我看来)它们是相同的,否则它们是不同的,这就是我diff在递归调用期间遇到符号链接时想要告诉我的全部内容。

我尝试过在线查找,但我要么找到与处理符号链接有关的主题,要么完全忽略它们。

答案1

GNU diff v3.3 引入了--no-dereference可实现该功能的选项。该选项diff --help在手册页中有描述,但未提及。

(也可以看看https://stackoverflow.com/a/32026096/301717https://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 文件来比较符号链接目标。

相关内容