Как узнать, какие файлы отличаются на двух серверах

225
Edik Mkoyan

здесь мы можем видеть, что 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 - 
0

3 ответа на вопрос

1
a CVn

Создайте список файлов на одном сервере и проверьте его на другом. Повторите с серверами в обратном порядке и сопоставьте списки.

Сначала соберите список файлов и соответствующих им хэшей на 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, которые не будут восприняты как есть). Просто повторите те же команды, но поменяйте местами имена серверов.

Как я могу создать список файлов в данном подкаталоге, я имею в виду, как я могу получить полное дерево, а также, возможно, исключить некоторые файлы или папки. Edik Mkoyan 8 лет назад 0
@EdikMkoyan Просто настройте параметры, чтобы `найти 'в соответствии с вашими потребностями. `md5sum --check` будет строго проверять список файлов, на которые он подается (поэтому вам также нужно сделать это дважды, чтобы убедиться, что оба сервера полностью синхронизированы). a CVn 8 лет назад 0
1
MariusMatutiae

Следующая строка будет делать:

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 {}' \;) 

Часто недооценивают, что такого рода задачи могут быть выполнены с помощью одной команды, благодаря замене процесса.

Это хорошее предложение. Я делаю такие вещи время от времени сам; не знаю, почему я не думал об этом как о возможном решении проблемы ОП. a CVn 8 лет назад 0
1
RedGrittyBrick

My first thought was to use

rsync ... --dry-run path user@remote:/path 

From the man page

-n, --dry-run perform a trial run with no changes made 

Rsync would report any files that are different

Но я также должен проверить, совпадают ли содержимое двух каталогов Edik Mkoyan 8 лет назад 0

Похожие вопросы