¿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.sh
guión):
find / -xdev | sort > fs-before.txt
Segunda instantánea ( after.sh
guión):
find / -xdev | sort > fs-after.txt
Para compararlos ( diff.sh
guió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 find
un -exec
pará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 -r
en realidad funciona bastante bien. Si sólo desea saber si los archivos difieren, no el contenido real de las diferencias, entonces hagadiff -qr