2011-10-12 10 views
8

Can Rsync se configura para verificar el contenido del archivo antes de sincronizarlo. He oído hablar de suma de comprobación, pero supe que la suma de comprobación solo hace una muestra. Quiero transferir un archivo solo si el contenido está cambiado y no la marca de tiempo, ¿hay alguna forma de hacerlo con cualquiera de los modos de sincronización rs? En mi caso, digamos que el archivo sample.text se creará todas las semanas y quiero sincronizarlo con un servidor remoto solo si se modifican los contenidos de sample.text, ya que se crea todas las semanas, la marca de tiempo obviamente cambiará. Pero quiero la transferencia solo en un cambio de contenido.Puede verificar el contenido de rsync antes de sincronizar

+0

¿Ha probado la página del manual de rsync? -c, --checksum Esto cambia la forma en que rsync comprueba si los archivos han sido cambiados y si necesitan una transferencia. Sin esta opción, rsync usa una "comprobación rápida" que (de forma predeterminada) verifica si el tamaño y la hora de la última modificación coinciden entre el emisor y el receptor. –

Respuesta

23

Sí, debe leer el manual.

$ man rsync | grep "\--checksum" 
    -c, --checksum    skip based on checksum, not mod-time & size 

Rsync es bastante complicado. Recomiendo el tiempo de acurrucamiento con la página man y la experimentación con datos de prueba antes de usarlo para cualquier cosa remotamente importante.

La mayoría de las veces, las personas usan rsync -ac source dest.

$ man rsync | grep "\--archive" 
-a, --archive    archive mode; same as -rlptgoD (no -H) 

Y eso significa -rlptgoD basura: recursive, copy symlinks as symlinks, preserve permissions, preserve times, preserve group, preserve owner, preserve device files (super-user only), preserve special files y skip based on checksum, not mod-time & size

El -c o --checksum es realmente lo que está buscando, y su suposición que solo muestrea mtime y el tamaño es incorrecto.

+3

+ para el tiempo de acomplamiento con la página man y la experimentación con datos de prueba_ - Extremadamente buenos consejos –

8

Consulte la opción --checksum en la página man de rsync.

Además, la opción --size-only será una opción más rápida si está seguro de que un cambio de contenido también significa un cambio de tamaño.

0

Ejemplo:

#!/bin/bash 
echo > diff.txt 
rsync -rvcn --delete /source/ /destination/ > diff.txt 
second_row=$(sed -n '2p' diff.txt) 
if [ "$second_row" = "" ]; then 
    echo there was no change 
else 
    echo there was change 
fi 
+1

Realmente debería agregar alguna explicación sobre por qué debería funcionar este código; también puede agregar comentarios en el código mismo; en su forma actual, lo hace no brinde ninguna explicación que pueda ayudar al resto de la comunidad a comprender lo que hizo para resolver/responder la pregunta. – ishmaelMakitla

+0

Si no hubo cambios, la segunda fila de diff.txt en modo detallado de rsync está vacía, sed examine esta segunda línea. – oldbowman

Cuestiones relacionadas