¿La mejor manera de comparar (diferenciar) una estructura de directorio completa?

¿La mejor manera de comparar (diferenciar) una estructura de directorio completa?

¿Cuál es la mejor manera de comparar estructuras de directorios?

Tengo una utilidad de respaldo que usasincronización. Quiero indicar las diferencias exactas (en términos de tamaños de archivos y fechas de último cambio) entre la fuente y la copia de seguridad.

Algo como:

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

Por supuesto, la herramienta puede estar lista para usar o ser una idea para un script en Python.

¡Muchas gracias!

udi

Respuesta1

La herramienta que buscas esrdiff. Funciona como combinar rsync y diff. Crea un archivo de parche que puede comparar o distribuir.

Respuesta2

Algunas personas quieren comparar sistemas de archivos por diferentes motivos, así que escribiré aquí lo que quería y cómo lo hice.

Quise:

  • para comparar elmismo sistema de archivosconsigo mismo, es decir,instantánea,hacer cambios,instantánea,comparar.
  • Una lista de los archivos que se agregaron o eliminaron, no se preocupaba por los cambios internos de los archivos.

Lo que hice:

Primera instantánea ( before.shguión):

find / -xdev | sort > fs-before.txt

Segunda instantánea ( after.shguión):

find / -xdev | sort > fs-after.txt

Para compararlos ( diff.shguión):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

Lo bueno es que utiliza prácticamente los archivos binarios predeterminados del sistema. Se podría hacer que se compare según el contenido pasando findun -execparámetro que hiciera eco de la ruta del archivo y un MD5 después de eso.

Respuesta3

Si no te apetece instalar otra herramienta...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"

Y sí, se podría hacer con find y exec o find y xargs tan fácilmente como buscar en un bucle for. Y, también, puedes mejorar la salida de diff para que diga cosas como "este archivo está en el host1 pero no en el host2" o algo así, pero en ese punto también puedes instalar las herramientas de las que todos los demás están hablando...

Respuesta4

diff -ren realidad funciona bastante bien. Si sólo desea saber si los archivos difieren, no el contenido real de las diferencias, entonces hagadiff -qr

información relacionada