
encontré deesta publicación en Stackoverflow, si solo desea obtener una lista de los archivos correspondientes cuyo contenido difiere, puede ejecutar:
diff --brief --recursive dir1/ dir2/
...y al intentarlo yo mismo, obtengo una pequeña lista de archivos cuyo contenido es diferente.
Pero si hice una copia de seguridad de un sistema de archivos original (supongamos sistemas de archivos GRANDES, 2 TB, por ejemplo), y quisiera verificar si la copia de seguridad es la misma que la original (por ejemplo, quiero verificar si la copia de seguridad se realizó correctamente), ¿qué ¿Debo ejecutarlo si solo estoy interesado en qué archivos NO están disponibles en ninguno de los lados? Quiero algo que verifique los árboles de directorios RÁPIDAMENTE (sin verificar el contenido).
Aunque comparar el tamaño del tamaño de archivo no proporciona una indicación absoluta sobre si el archivo respaldado es diferente, sería útil comparar ese y otros metadatos que no son de contenido de archivo durante el comando de comparación.
(Mis disculpas por volver a publicar una pregunta muy similar, pero noté que un usuario argumentaba que la pregunta quizás estaba fuera de tema, por lo que esta pregunta definitivamente estaría en stackoverflow).
¿Alguna experiencia sobre esto?
Respuesta1
Una solución sin rsync que verifica la hora de modificación y el tamaño del archivo:
diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'
Salida de ejemplo:
> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep 8 23:01:02.0355432619 2013 347
Muestra que foo
ha sido modificado en dir1
y bar
sólo existe en dir2
.
Respuesta2
No nos dice qué solución de respaldo utiliza, pero casi todos los programas de respaldo reales tienen un modo de "verificación". (Una herramienta de copia de seguridad "real" en este contexto es algo como Bacula, un software diseñado expresamente para realizar copias de seguridad y restaurar).
En igualdad de condiciones, sugeriría utilizar software de copia de seguridad real y sus herramientas de verificación integradas.
Todas las demás cosas NO son iguales, rsync -nav --delete <backup> <original>
sería mi sugerencia.
Estehaceverifique el contenido y le informará sobre archivos adicionales, archivos diferentes y archivos faltantes. No es tan profundo (lento) como un diff
, y eso -n
significa que en realidad no tocará el sistema de archivos.
Respuesta3
Como resultado de las respuestas anteriores, se me ocurrió el siguiente pequeño guión que quería compartir:
# vi /bin/checkbackup
#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp
# chmod 755 /bin/checkbackup
Uso:
$ checkbackup /path/to/dir1 /path/to/dir2
Sin informes significa que la estructura de carpetas y los nombres son los mismos, y que los archivos tienen el mismo tamaño y los mismos nombres, sin que falte ninguno.
Probado en árboles de directorios de 1,5 TB en discos SATA2 de 5400 rpm, finaliza en aproximadamente 5 minutos.
Este script no está terminado de ninguna manera, sin duda existen otros mejores, más rápidos y más profundos con más herramientas de verificación. Pero pensé en compartirlo de todos modos.