热让差异检查符号链接本身?

Ale*_*lex 9 diff symlink

在 Linux 中可以使用该命令diff来检查文件的差异。我用它来检查两个模块之间的差异,都复制到/tmp.

但是,两个模块都有符号链接,它们可能没有指向正确的文件,因为这些模块已被复制到/tmp目录中。但这没关系。我想检查的是符号链接是否相同。

例如,在一个模块中,符号链接读取

/home/test/file1
Run Code Online (Sandbox Code Playgroud)

在另一个符号链接中显示:

/etc/rc.d/whatever
Run Code Online (Sandbox Code Playgroud)

diff现在抛出一个错误,因为 - 通常 - 它找不到文件。但我diff想说:“嘿,这些符号链接不一样”,无论链接是否指向有效文件。

问题:怎么可能diff做到这一点,即不尝试跟踪链接,而是区分链接本身?

Bri*_*rin 7

尝试使用 GNU diff3.3 或更高版本的--no-dereference选项(大概是 --recursive 选项):

diff --recursive --no-dereference tree1root tree2root
Run Code Online (Sandbox Code Playgroud)


Chr*_*own 1

如果我理解正确,您需要检查符号链接是否指向相同的理论目的地,或者如果一个不是符号链接,则另一个文件链接到同一文件。这应该做你想要的:

#!/bin/bash

if [[ "$(readlink -m -- "$1")" == "$(readlink -m -- "$2")" ]]; then
    echo "files match"
else
    echo "files don't match"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)
$ > foo 
$ ln -s foo bar
$ ln -s foo baz
$ ./script bar baz
files match
$ ./script bar foo
files match
$ ln -sf qux bar
$ ./script bar foo
files don't match
Run Code Online (Sandbox Code Playgroud)