У меня есть две папки, содержащие несколько неработающих символических ссылок.
Есть ли способ заставить diff
сравнивать цель ссылок вместо того, чтобы пытаться перейти по ссылкам?
Под «содержанием ссылок» я предполагаю, что вы имеете в виду «цель ссылки». Если это правильно, то да, есть. Вроде, как бы, что-то вроде. И вам нужно получить creatie с перенаправлением оболочки:)
diff -u \
<(cd /path/to/dir1 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort) \
<(cd /path/to/dir2 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort)
Для этого нужно запустить diff
с вводом двух команд:
cd /path/to/dir1 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort
cd /path/to/dir2 && find . -type l -exec stat '{}' '+' | grep 'File:' | sort
Эти find | grep | sort
Команды отображают имя и цель всех символических ссылок, которые он может найти в dir1 и dir2, вместе с их целями. Таким образом, в результате вы увидите, какие символические ссылки отличаются.
(Отредактировано из исходного ответа, который включал полный путь к имени файла в выходных данных ls
, и, следовательно, показывал каждый файл как отдельный. Обходили это с помощью сначала cd
. Также, если символические ссылки имели разные даты и время, diff также покажет их как разные. Обойти это, используя stat
для извлечения информации, которую мы на самом деле хотим.)