Estoy encontrando múltiples respuestas a la pregunta, así que quería preguntarle a las personas que realmente la usan, en lugar de solo querer hacer el blog más grande completando información aleatoria semi inútil.
Escenario: yo
rsync -av --progress /dir/a /dir/b
y hace lo suyo.
Agrego archivos nuevos a / dir / a y ejecuto el mismo comando nuevamente, sabe lo que hizo y solo copia los archivos nuevos.
Agrego nuevos archivos a / dir / a y cambio el nombre de algunos archivos en / dir / b, y tal vez también elimine algunos.
Si corro rsync -av --progress /dir/a /dir/b
nuevamente, ¿qué se copiará? Solo los archivos nuevos porque sabe lo que ha copiado anteriormente, o los archivos que fueron renombrados / eliminados también, porque ya no están presentes.
Y como beneficio adicional, si los archivos copiados anteriormente se vuelven a copiar, ¿hay alguna manera de evitarlo, de modo que solo se copien las nuevas adiciones a / dir / a?
Por el momento, me complace comprobar las cosas manualmente, pero a medida que los datos crecen, necesitaré más automatización para realizar esta tarea.
-i
bandera es muy útil. Para cada archivo, proporciona una cadena de coincidencia que se puede decodificar para ver por qué coincide (marca por tiempo de modificación,Respuestas:
No, no sabe lo que hizo en una ejecución anterior. Compara los datos en el lado receptor con los datos que se enviarán. Con datos lo suficientemente pequeños, esto no será evidente, pero cuando tiene directorios lo suficientemente grandes, el tiempo dedicado a comparar antes de que comience la copia se siente fácilmente.
La verificación predeterminada es para tiempos y tamaños de modificación de archivos. De
man rsync
:Y:
Tenga en cuenta que esto no está implícito en las opciones que utilizó.
-a
es:fuente
--fuzzy
una vez, los reconocerá como iguales en el mismo directorio. Usar--fuzzy
dos veces expande esta capacidad a otras ubicaciones. Verman rsync
para más detalles. Por supuesto, una de las razones principales para usarrsync
es su capacidad de copiar solo las partes de un archivo que han cambiado. Esto puede hacer transferencias a través de una red mucho más rápido. Por cierto, la opción de suma de comprobación se menciona anteriormente para su explicación de cómorsync
funciona. En la mayoría de los casos, no debe usarse.General
Si entiendo correctamente,
rsync -av
no tiene memoria, por lo que también copiará los archivos que fueron renombrados / eliminados, porque están presentes en la fuente pero ya no están en el destino.Consejos
Use la opción
-n
, 'ejecución en seco', para verificar qué sucede antes de ejecutar sursync
línea de comando.Observe el significado especial de una barra inclinada posterior al directorio de origen y vea la diferencia entre
y
que se describe en el manual
man rsync
.Ejemplo
Su caso especial (agregar un archivo al directorio de origen 'a' y eliminar un archivo del directorio de destino 'b') agregará tanto el archivo agregado como el archivo copiado previamente, porque todavía está en el directorio de origen. Esto sucederá con y sin la opción
-u
y no conozco ninguna opciónrsync
para solucionarlo fácilmente, si desea mantenerlo en el directorio de origen.Pero puede eliminarlo del directorio de origen o poner el nombre del archivo en el archivo
excluded
y usar la opción--exclude-from=excluded
(para muchos archivos) o simplemente--exclude=PATTERN
para uno o unos pocos archivos.Alternativa:
unison
Es posible que desee probar la herramienta
unison
, que es una herramienta de sincronización . Proporciona un método visual para identificar casos especiales y decidir qué hacer. Hay una versión GUI (unison-gtk
).fuente
unison-gtk
durante varios años y estoy contento con eso. (Yorsync
también uso )Solo copia los nuevos archivos en / dir / a. Cualquier cosa que haga en / dir / b será ignorada, a menos que use la opción --delete. En ese caso, los archivos renombrados en / dir / b serán eliminados. Obligará a / dir / b a ser exactamente como / dir / a.
Sobre el bono, ¿quieres decir como en el caso de cambiar el nombre de los archivos en / dir / a, y luego rsyncing a / dir / b? No creo que haya una manera de evitar que rsync simplemente copie los archivos nuevamente en ese caso.
fuente