Esto coloca la carpeta A en la carpeta B:
rsync -avu --delete "/home/user/A" "/home/user/B"
Si desea el contenido de las carpetas A y B para ser lo mismo, pon /home/user/A/
(con la barra oblicua) como fuente. Esto no toma la carpeta A sino todo su contenido y lo coloca en la carpeta B. Así:
rsync -avu --delete "/home/user/A/" "/home/user/B"
-a
Realice la sincronización conservando todos los atributos del sistema de archivos-v
ejecutar detalladamente-u
solo copie archivos con un tiempo de modificación más reciente (o diferencia de tamaño si los tiempos son iguales)--delete
elimine los archivos en la carpeta de destino que no existen en la fuente
Página de manual:https://download.samba.org/pub/rsync/rsync.html
Podrías unison
herramienta desarrollada por Benjamin Pierce en U Penn.
Supongamos que tiene dos directorios,
/home/user/Documents/dirA/
y /home/user/Documents/dirB/
Para sincronizar estos dos, puede usar:
~$unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/
En salida, unison
mostrará todos y cada uno de los directorios y archivos que son diferentes en los dos directorios que ha solicitado sincronizar. Recomendará sincronizar aditivamente (replicar el archivo faltante en ambas ubicaciones) en la ejecución inicial, luego crear y mantener un árbol de sincronización en su máquina, y en ejecuciones posteriores implementará una sincronización real (es decir, si elimina un archivo de .../dirA
, se eliminará de .../dirB
también. También puede comparar todos y cada uno de los cambios y, opcionalmente, elegir reenviar o inversa sincronizar entre los dos directorios.
Opcionalmente, para iniciar la interfaz gráfica, simplemente elimine el -ui text
opción de su comando, aunque encuentro el cli
más simple y rápido de usar.
Más sobre esto:tutorial de Unison en la documentación del usuario de Unison.
La respuesta de TuxForLife es bastante buena, pero te sugiero que uses -c
al sincronizar localmente. Puede argumentar que no vale la pena la penalización de tiempo/red para hacerlo para sincronizaciones remotas, pero vale la pena para archivos locales porque la velocidad es muy buena.
-c, --checksum This forces the sender to checksum every regular file using a 128-bit MD4 checksum. It does this during the initial file-system scan as it builds the list of all available files. The receiver then checksums its version of each file (if it exists and it has the same size as its sender-side counterpart) in order to decide which files need to be updated: files with either a changed size or a changed checksum are selected for transfer. Since this whole-file checksumming of all files on both sides of the con- nection occurs in addition to the automatic checksum verifications that occur during a file's transfer, this option can be quite slow. Note that rsync always verifies that each transferred file was correctly reconstructed on the receiving side by checking its whole-file checksum, but that automatic after-the-transfer verification has nothing to do with this option's before-the-transfer "Does this file need to be updated?" check.
Esto muestra cómo tener las mismas marcas de tiempo y tamaño puede fallar.
La configuración
$ cd /tmp
$ mkdir -p {A,b}/1/2/{3,4}
$ echo "\___________from A" | \
tee A/1/2/x | tee A/1/2/3/y | tee A/1/2/4/z | \
tr A b | \
tee b/1/2/x | tee b/1/2/3/y | tee b/1/2/4/z | \
tee b/1/2/x0 | tee b/1/2/3/y0 > b/1/2/4/z0
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
El rsync que no copia nada porque todos los archivos tienen el mismo tamaño y marca de tiempo
$ rsync -avu A/ b
building file list ... done
sent 138 bytes received 20 bytes 316.00 bytes/sec
total size is 57 speedup is 0.36
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
El rsync que funciona correctamente porque compara sumas de comprobación
$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z
sent 381 bytes received 86 bytes 934.00 bytes/sec
total size is 57 speedup is 0.12
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b