Cómo saber qué archivos son diferentes en dos servidores


0

Aquí podemos ver que md5sums de estos dos directorios son diferentes, ¿cómo saber si las estructuras de carpetas o algunos archivos son la razón de esta diferencia?

[skynet] ~> ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; | ordenar -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 {} \; | ordenar -k 34 | md5sum '
Ubuntu 14.04.4 LTS evn-web03.tumo.lab ssh-pty

53413a49fb754210666f4292e8b9ee14 -

Respuestas:


1

Genere la lista de archivos en un servidor y compruébelo en el otro. Repita con los servidores en orden inverso y clasifique las listas.

Primero, reúna una lista de archivos y sus hashes correspondientes en evn-web04:

ssh evn-web04 'find  /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;'

En segundo lugar, pase esto a la misma utilidad hash en evn-web03, pasando --checky filtre para cualquier cosa que no sea idéntica:

ssh evn-web04 'find  /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;' | \
ssh evn-web03 "md5sum --check - | grep -vE ': OK$'"

Esto le dará una lista de archivos que:

  • existe en evn-web04, pero no existe en evn-web03, o
  • existen en evn-web04, y son diferentes entre evn-web04 y evn-web03

Para obtener una lista completa de las diferencias, también debe invertir el orden del servidor (porque pueden existir archivos en evn-web03 que no existen en evn-web04, que lo anterior no detectará tal cual). Simplemente ejecute los mismos comandos nuevamente pero coloque los lugares de cambio de los nombres del servidor.


¿Cómo puedo generar la lista de archivos en un subdirectorio? Quiero decir, ¿cómo puedo obtener el árbol completo y probablemente también excluir algunos archivos o carpetas?
Edik Mkoyan

@EdikMkoyan Simplemente modifique los parámetros findpara adaptarlos a sus necesidades. md5sum --checkobservará estrictamente la lista de archivos que recibe (por lo que también debe hacerlo dos veces para asegurarse de que ambos servidores estén totalmente sincronizados).
un CVn

1

El siguiente one-liner hará:

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 menudo se subestima que este tipo de tareas se pueden llevar a cabo con un solo comando, gracias a la sustitución de procesos.


Esta es una buena sugerencia. Hago este tipo de cosas de vez en cuando yo mismo; No sé por qué no pensé en ello como una posible solución al problema del OP.
un CVn

1

Mi primer pensamiento fue usar

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

Desde la página del manual

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

Rsync informaría cualquier archivo que sea diferente


Pero también necesito verificar si el contenido de dos directorios es el mismo
Edik Mkoyan,
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.