4

Я пытаюсь изменить две директории, используя (хорошо) diff . Однако diff фактически следует по символическим ссылкам и сравнивает различия между целевыми файлами. Кажется, я не могу найти способ не делать diff . Вместо этого я хотел бы знать, являются ли цели одинаковыми (или разными в этом отношении). Другими словами, если символические ссылки указывают на один и тот же файл, (на мой взгляд) они одинаковы, иначе они отличаются, и это все, что я хочу, чтобы diff сообщал мне, когда он сталкивается с символическими ссылками во время рекурсивного вызова.

Я пытался искать в Интернете, но я либо нахожу темы, касающиеся работы только с символическими ссылками, либо вообще их игнорирую.

2 ответа2

2

GNU diff v3.3 представляет опцию --no-dereference которая делает свое дело. Эта опция описывается diff --help но не упоминается на странице руководства.

(см. также https://stackoverflow.com/a/32026096/301717 и https://unix.stackexchange.com/a/151837/72654)

1

Если вы добавите строки, такие как:

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 и затем снова выполнить тот же поиск, но снимая последний сед, и добавив еще несколько седов, чтобы убрать все, кроме пунктов назначения.

find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^  File: \`//" | sed "s/.*-> \`//" | sed "s/'//g" | sed s/\`// > symlinks-dest

сделайте это для каждого dir, и тогда вы сможете различить эти два файла symlinks-dest, чтобы сравнить места назначения символических ссылок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .