GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo sincronizar dos carpetas con herramientas de línea de comandos?

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

Linux
  1. Linux:¿cómo sincronizar dos carpetas con herramientas de línea de comandos?

  2. Cómo reiniciar Linux usando la línea de comandos

  3. Cómo eliminar archivos con una extensión específica en la línea de comandos de Linux

  4. ¿Cómo convertir un PDF a JPG con línea de comando en Linux?

  5. ¿Cómo convierto un documento DjVu a PDF en Linux usando solo herramientas de línea de comandos?

Cómo enviar un correo electrónico con un archivo adjunto desde la línea de comandos

Cómo comprobar la versión del sistema operativo con la línea de comandos de Linux

Cómo instalar Dig en Linux con ejemplos de línea de comandos

Cómo encontrar la dirección IP en la línea de comandos de Linux

Cómo controlar versiones con Git en la línea de comando

Cómo monitorear el estado del servidor Linux con herramientas de línea de comandos