Я использую diff -r a b
для рекурсивного сравнения каталогов a и b . Однако часто случается, что существуют неработающие ссылки (одни и те же неработающие ссылки в каталогах a и b и указывающие на одни и те же несуществующие цели).
Затем diff выводит сообщения об ошибках для этих случаев и завершает работу с ненулевым кодом выхода, однако я хотел бы, чтобы он молчал и выходил с 0, поскольку каталоги в моей книге совпадают.
Как я могу это сделать?
Ответы:
Для версии 3.3 или новее
diff
вы должны использовать эту--no-dereference
опцию, как описано в ответе Пита Харлана .К сожалению, старые версии
diff
не поддерживают игнорирование символических ссылок :Если все, что вам нужно, это проверить rsync (и предположительно исправить то, что отсутствует), то вы можете просто запустить команду rsync во второй раз. Если вы не хотите этого делать, то проверки суммирования каталога может быть достаточно.
Если вы действительно хотите это сделать
diff
, то можетеfind
пропустить символические ссылки и запустить diff для каждого файла в отдельности. Передайте ваши каталоги a и b в качестве аргументов:или как однострочник:
Это идентифицирует файлы, которые отличаются по содержанию, или файлы, которые находятся в a, но не в b .
Обратите внимание, что:
rsync
сценария.источник
for f in
найти / *! Тип л;do echo $f b/${f#*/};done
. У меня нет времени, чтобы проверить это прямо сейчас. Дай мне знать, если это работает.$(xxx)
вместо обратной галочки. Симметрия обратных кавычек делает их менее читаемыми и предотвращает вложение. Что касается 1 и 2 см stackoverflow.com/questions/11366184/...Начиная с версии 3.3 GNU
diff
поддерживает не разыменование символических ссылок, но затем сравнивает пути, на которые они указывают.Установите GNU
diffutils
> = 3.3 и используйте--no-dereference
опцию; нет короткого варианта для этого.Диагностика будет молчать, если равна или:
Символические ссылки
/tmp/noderef/a/symlink
и/tmp/noderef/b/symlink
отличаютсяисточник
Вы можете использовать более новую версию
diff
В
diff
GNUdiffutils
3.3 есть--no-dereference
опция, которая позволяет сравнивать сами символические ссылки, а не их цели. Он сообщает, если они различаются, тихо, если они согласны, и ему все равно, сломаны ли они.Я не знаю, когда была добавлена опция; его нет в 2.8.1.
источник