rsync сравнить каталоги?

Можно ли сравнить два каталога с rsync и распечатать только различия? Существует вариант с сухим пробегом, но когда я увеличиваю многословие до определенного уровня, отображается каждый сравниваемый файл.

ls -alR и diff здесь не вариант, поскольку в источнике есть жесткие ссылки, делающие каждую строку разной. (Конечно, я могу удалить этот столбец с помощью perl.)

Вам будет удобно запускать что-то вроде rsync -avun --delete в обоих направлениях.

Но чего вы на самом деле пытаетесь достичь?

Обновление :

rsync -avun --delete $TARGET $SOURCE |grep "^deleting " предоставит вам список файлов, которые не существуют в целевом каталоге.

«grep delete», потому что каждая строка печатает: delete ing ..file ..

rsync -avun $SOURCE $TARGET предоставит вам список «разных» файлов (включая новые файлы).

Чтобы добавить к ответу Нильса (для тех, кто сталкивается с этим через Google), по умолчанию rsync сравнивает только размеры файлов и время модификации, чтобы определить, есть ли какие-либо различия. (Если они разные, это делает больше, но если они одинаковые, это останавливается там.)

Если вы хотите сравнить фактическое содержимое файла, даже для файлов с одинаковым размером и временем последней модификации, добавьте флаг -c чтобы сообщить rsync сравнить файлы с помощью контрольной суммы.

 rsync -avnc $SOURCE $TARGET 

(Параметр -u указывает rsync игнорировать файлы, которые новее в $TARGET чем на $SOURCE , которые, вероятно, вам не нужны, если вы сравниваете содержимое.)

Для тех, кто менее знаком с rsync :

 rsync -rvnc --delete ${SOURCE}/ ${DEST} 
  • -n : самый важный бит – ничего не меняйте;
  • -rc : сравнивать только содержимое (в противном случае использовать -ac );
  • -v : список файлов)
  • --delete : искать симметричную, а не однонаправленную разницу.

  • Наконец, / означает «заглянуть внутрь каталога и сравнить его содержимое с пунктом назначения».

PS. Я знаю, что это ужасный PS – но это действительно было добавлено в спешке. Тем не менее, я уверен, это может показаться полезным.

Я понимаю из вашего вопроса, что вы не хотите использовать diff для ls , но вы также можете использовать diff рекурсивно в каталогах:

 diff -rq DIR1 DIR2