Как узнать, какие файлы отличаются на двух серверах
Здесь мы можем видеть, что md5sums этих двух каталогов различны, как определить, являются ли структуры папок или некоторые определенные файлы причиной этой разницы?
[skynet] ~> ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; | сортировать -k 34 | md5sum" Ubuntu 14.04.4 LTS evn-web04.tumo.lab ssh-pty f247a2e41cf54f14cefe83b8872ae862 - [skynet] ~> ssh evn-web03 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; | сортировать -k 34 | md5sum" Ubuntu 14.04.4 LTS evn-web03.tumo.lab ssh-pty 53413a49fb754210666f4292e8b9ee14 -
3 ответа
Создайте список файлов на одном сервере и проверьте его на другом. Повторите с серверами в обратном порядке и сопоставьте списки.
Сначала соберите список файлов и соответствующих им хэшей на evn-web04:
ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;'
Во-вторых, передайте это той же хэш-утилите на evn-web03, передав --check
и отфильтруйте все, что не идентично:
ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;' | \
ssh evn-web03 "md5sum --check - | grep -vE ': OK$'"
Это даст вам список файлов, которые:
- существуют на evn-web04, но не существуют на evn-web03, или
- существуют на evn-web04 и различаются между evn-web04 и evn-web03
Чтобы получить полный список различий, вам также необходимо изменить порядок серверов (поскольку в evn-web03 могут существовать файлы, которых нет в evn-web04, которые не будут восприняты как есть). Просто повторите те же команды, но поменяйте местами имена серверов.
Следующая строка будет делать:
diff <(find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;) \\
<(ssh me@remote find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;)
Часто недооценивают, что такого рода задачи могут быть выполнены с помощью одной команды, благодаря замене процесса.
Моей первой мыслью было использовать
rsync ... --dry-run path user@remote:/path
Со страницы руководства
-n, --dry-run perform a trial run with no changes made
Rsync сообщит о любых файлах, которые отличаются