В Linux можно использовать команду diff
для проверки различий файлов. Я использую его для проверки различий между двумя модулями, оба скопированы в /tmp
.
Однако оба модуля имеют символические ссылки, которые могут не указывать на правильный файл, так как модули были скопированы в /tmp
каталог. Но это не имеет значения. Я хочу проверить, совпадают ли символические ссылки.
Например, в одном модуле символическая ссылка читает
/home/test/file1
а в другой символическая ссылка гласит:
/etc/rc.d/whatever
diff
теперь выдает ошибку, потому что - в общем - он не может найти файл. Но я хочу diff
сказать: «Эй, эти символические ссылки не одинаковы», независимо от того, указывают ли ссылки на действительные файлы или нет.
Вопрос: Как это можно diff
сделать, то есть не пытаясь переходить по ссылкам, а разграничивать сами ссылки?
Начиная с версии 3.3, GNU diff не поддерживает разыменование символических ссылок, но затем сравнивает пути, на которые они указывают.
Установите GNU diffutils> = 3.3 и используйте опцию --no-dereference; нет короткого варианта для этого.
Диагностика будет молчать, если пути равны или:
если пути различаются.
источник
С инструментами GNU:
Строго говоря, это не может различить вызываемую символическую ссылку,
a
которая указывает на,b -> c
и вызываемую ссылку ,a -> b
которая указывает наc
, не говоря уже о проблемах с именами файлов, содержащими символы новой строки, но это обеспечивает более разборчивый вывод, чем более надежный:Там мы используем
//
в качестве разделителя (что не может произойти в противном случае при выводеfind
for%p
) и преобразуем символы новой строки в символы NUL (что не может произойти при расширении%p
nor%l
).источник
Если я правильно понимаю, вы хотите проверить, что символические ссылки указывают на то же теоретическое назначение, или что, если одна не является символической ссылкой, другой файл ссылается на тот же файл. Это должно делать то, что вы хотите:
источник
-m
, а не-f
. Спасибо!-m
./home/test/file1
это символическая ссылка/etc/rc.d/whatever
, или они обе символические ссылки/
, он сообщит, что они одинаковы. Я думаю, что ОП хочет видеть разницу в «пути», хранящемся в символической ссылке, а не в том, разрешают ли они один и тот же файл (для которого у вас есть[[ a -ef b ]]
).