Сравнить содержимое двух каталогов на удаленном сервере с помощью unix
Я новичок в unix и нуждаюсь в некоторой помощи здесь.
У меня есть два каталога на двух разных серверах. оба каталога содержат одни и те же файлы. Теперь я хочу проверить, синхронизированы ли все файлы в обоих каталогах. Если файлы не синхронизированы, я хочу отобразить только имя этих файлов.
Я могу сделать это, когда каталоги находятся на одном сервере. не может понять, как это сделать, когда каталоги присутствуют на двух разных серверах.
eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/
здесь я хочу, чтобы только имя файла отображалось, когда оно не синхронизировано.
Заранее спасибо
Ответы
Ответ 1
Вы можете использовать rsync с флагом -n, чтобы узнать, синхронизированы ли файлы, без фактической синхронизации.
Например, из server1:
rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/
Это приведет к печати имен всех файлов (рекурсивных с флагом -r), которые отличаются между сервером1:/abc/home/sample1/и server2:/abc/home/sample2/
Ответ 2
На сервере1:
cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n")
Это довольно быстро, но, вероятно, не так точно, как rsync, поскольку он использует размер файла вместо хеша содержимого. Кроме того, rsync из ответа kielni ничего не покажет, если server2 имеет больше файлов, а затем server1. Вместо этого попробуйте следующее:
rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
Ответ 3
В сценарии отсутствия связи между двумя серверами используйте команду "tree", чтобы получить структуру каталогов в файлах, а затем разделить два файла.