¿Cómo confirmar que un archivo se ha copiado en un nuevo disco sin ningún error?

4

Me gustaría copiar archivos de una unidad externa a una unidad conectada a la red. Quiero asegurarme de que no haya errores.

Sé de archivos hash MD5 que veo para archivos individuales grandes que se descargan de Internet. También sé que puedo usar el terminal para 'diferenciar' los dos conjuntos de archivos.

Sin embargo, estoy buscando una pieza de software que pueda confirmar que todos los archivos en la estructura de archivos han sido copiados por el buscador por completo, o una pieza de software que haría la copia por mí y confirmaría que todos los bits son exactamente lo mismo.

Los archivos están relacionados con el video, y a menudo tienen un tamaño de TB (no en un archivo, archivos anidados complejos de múltiples carpetas)

Estoy bien si hay un comando de terminal que también puede hacer la copia y comparar para mí. (aunque poder ver la cantidad de tiempo que queda en una copia es una característica muy agradable ... además, quiero asegurarme de obtener TODO el archivo - tenedores de recursos y todo)

malvado
fuente

Respuestas:

8

o una pieza de software que haría la copia por mí y confirmaría que todos los bits son exactamente iguales.

Esto es lo que hace rsync . Puede copiar un archivo, árboles completos de archivos, prácticamente cualquier cosa. Y lo hace con un algoritmo confiable. Al final de un rsync puede estar seguro de que el receptor recibió exactamente lo que envió desde la fuente.

Hay una GUI para rsync llamada arRsync que puede hacer que trabajar con él sea un poco más amigable, aunque no funciona para llamadas rsync-over-ssh.

La otra ventaja de rsync es que puede hacer una copia de reanudar en interrupción. Particularmente bueno si está copiando muchos archivos o incluso archivos grandes a través de redes que no son confiables.

Si está copiando una unidad local y una red que están disponibles para la misma Mac, puede hacer lo siguiente:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/big-movie.mov /Volumes/RemoteShare/path/

Y ya terminaste.

Si es un directorio (qué paquetes .appson), puede hacer una copia completa y recursiva con:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/my-bundle.app /Volumes/RemoteShare/path/

Si no tiene acceso de nivel Finder / Bonjour al fregadero, puede hacer rsync-over-ssh:

rsync -avz /Volumes/LocallyAttachedDrive/path/to/my-bundle.app remoteuser@remotehost:/Volumes/RemoteShare/path/

Se puede generar una clave compartida para que no tenga que ingresar una contraseña si lo desea.

Editar: puede usar rsyncpara verificar si dos árboles son iguales con la --dry-run/-nopción. Si tengo el árbol fuente /Volumes/diry lo he copiado, /Volumes/ConnectedDrive/dirpuedo compararlos con:

rsync -acvn /Volumes/dir /Volumes/ConnectedDrive/

La salida me dirá si es necesario copiar algún archivo en el receptor para que el receptor sea igual a la fuente.

Por ejemplo, si sincronizo dos árboles:

> rsync -avz ./8779 ./a/
building file list ... done
8779/
8779/.DS_Store
8779/logs/
8779/logs/MasterLog.txt
8779/logs/StartLog.txt

sent 893980 bytes  received 98 bytes  596052.00 bytes/sec
total size is 10034671  speedup is 11.22

Compararlos por igualdad no debería generar operaciones:

> rsync -acvn ./8779 ./a/
building file list ... done

sent 213 bytes  received 20 bytes  155.33 bytes/sec
total size is 10034671  speedup is 43067.26

Si el sumidero fuera ligeramente diferente, veríamos resultados como este:

> echo foo >> a/8779/logs/MasterLog.txt 

> rsync -acvn ./8779 ./a/              
building file list ... done
8779/logs/MasterLog.txt

sent 219 bytes  received 26 bytes  490.00 bytes/sec
total size is 10034671  speedup is 40957.84

Ahora sabemos que el MasterLog.txtarchivo no es el mismo.

Ian C.
fuente
Gracias Ian, ¿entiendo correctamente que podría ejecutar rsync -vcn / Volumes / dir / Volumes / ConnectedServer / dir para que me dé un informe que diga si alguno de los archivos está 'corrupto'? (¿Si ya hubiera copiado algo con el Finder?)
evilblender
1
Cerca. /importa en rsync. Probar: rsync -avcn /Volumes/dir /Volumes/ConnectedServer/ Eso debería hacer el truco. Ampliaré mi respuesta con más detalles.
Ian C.
Gracias por la explicación extendida! Eso está muy claro. Gracias de nuevo.
evilblender
1
md5 -r file1 file2

imprimirá los hashes de ambos archivos para que pueda compararlos con los ojos. El indicador -r imprime los hashes primero (en lugar del nombre del archivo primero) para que los hashes se alineen entre sí en el margen izquierdo, lo que facilita la comparación visual.

JRobert
fuente
MD5 se ha roto, sugiero reemplazarlo conshasum -a 256 /path/to/file
Alexander
MD5 solo está roto para uso criptográfico. Mientras no haya un modelo de amenaza en el que un atacante intente modificar un archivo sin que sea detectado, MD5 está bien para usar aquí.
zigg
0

Me quedaría con MD5 si necesita una verificación absoluta de que los archivos son los mismos. Podría escribir un pequeño script bash para repetir los directorios y generar / verificar el hash para cada archivo.

KidPub
fuente