10 ejemplos útiles del comando rsync de Linux

Publicado: 2022-10-28
Computadora portátil Linux que muestra un indicador de bash
fatmawati achmad zaenuri/Shutterstock.com

El comando rsync de Linux es una poderosa herramienta de copia de archivos y sincronización de carpetas. Aquí hay diez casos de uso comunes que podrá aprovechar en sus propios sistemas.

Tabla de contenido

La herramienta rsync

La herramienta rsync copia archivos y directorios entre dos computadoras. Utiliza un algoritmo sofisticado que escanea árboles de directorios para encontrar archivos en la computadora de origen que no existen en la computadora de destino. Estos archivos se transmiten a la computadora de destino. Lo que hace que rync sea tan inteligente es que puede averiguar qué partes de los archivos existentes se han modificado y solo envía las partes modificadas .

Puede usar rsync para copiar archivos a una ubicación diferente en su disco duro, a un disco duro diferente en la misma computadora, a una unidad USB conectada externamente o a cualquier otra ubicación accesible en red.

Cómo hacer una copia de seguridad de su sistema Linux con rsync
RELACIONADO Cómo hacer una copia de seguridad de su sistema Linux con rsync

Además de eso, rsync puede conservar opcionalmente enlaces simbólicos, enlaces duros y metadatos de archivos, como propiedad de archivos, permisos y tiempos de acceso. Para admitir toda esta funcionalidad, rsync tiene muchas opciones y resolverlas lleva tiempo. Hemos recopilado estos 10 ejemplos para ayudarlo a comenzar. Ya hemos escrito sobre cómo hacer copias de seguridad con rsync , por lo que nos estamos concentrando en otros usos aquí.

Para todas sus muchas opciones, la estructura de un comando rsync es simple. Necesitamos proporcionar la fuente, el destino y las opciones que queremos usar. Probablemente encontrará que rsync ya está instalado en su computadora con Linux (lo estaba en todas nuestras máquinas de prueba), pero si no lo está, definitivamente estará en los repositorios de su distribución.

1. Copiar archivos a un directorio diferente

Aquí hay un ejemplo simple para que podamos comenzar. Vamos a copiar los archivos del directorio "archivos de proyecto" al directorio "Documentos". Estamos usando dos opciones, la opción -a (archivo) y la opción -v (detallado). La opción detallada le dice a rsync que explique lo que está haciendo mientras lo hace. La opción de archive conserva la propiedad del archivo y algunos otros elementos que veremos en breve.

El formato del comando es options source-location destination-location .

 rsync -av /inicio/dave/archivos-del-proyecto/ /inicio/dave/Documentos/ 

Copiar archivos a un directorio diferente en la misma computadora con rsync

El uso de ls en la carpeta "Documentos" muestra que los archivos se han copiado.

Listado de archivos en el directorio de documentos

Mientras rsync funciona, los archivos se enumeran a medida que se copian. Se les dijo:

  • El número de bytes que se envían.
  • El número de bytes recibidos. Antes de que se lleve a cabo la transferencia de archivos, rsync debe determinar qué archivos deben transferirse. Para hacer eso, rsync debe recuperar cierta información sobre los archivos en el destino. Esta información está contenida en los bytes recibidos.
  • La velocidad de la transferencia.
  • El tamaño total de los archivos copiados.
  • La "aceleración". Esta es la relación del tamaño total dividida por la suma de los bytes enviados y recibidos. Cuanto mayor sea este número, más eficiente será la transferencia.

Modificamos el archivo de texto en el directorio fuente y repetimos el comando rsync .

 rsync -av /inicio/dave/archivos-del-proyecto/ /inicio/dave/Documentos/ 

Copiar archivos a un directorio diferente en la misma computadora con rsync

Esta vez, el único archivo que debe actualizarse es el archivo de texto que modificamos. La cifra de aceleración ahora es de 30.850. Así de eficiente es copiar la parte modificada de ese único archivo, que copiar todos los archivos.

La opción -a (archivo) en realidad representa una colección de otras opciones. Es lo mismo que usar todas estas opciones:

  • r : Trabaje recursivamente a través de árboles de directorios en el directorio de origen y cópielos en el directorio de destino, creándolos si aún no existen allí.
  • l : Copie enlaces simbólicos como enlaces simbólicos.
  • p : conservar los permisos de archivo.
  • t : Preservar los tiempos de modificación de archivos.
  • g : Preservar los permisos del grupo.
  • o : Preservar la propiedad del archivo.
  • D : Copie archivos especiales y archivos de dispositivos. Los archivos especiales pueden ser elementos centrados en la comunicación que se tratan como archivos, como sockets y conductos de tipo primero en entrar, primero en salir (fifos). Los archivos de dispositivos son archivos especiales que brindan acceso a dispositivos y pseudodispositivos.

Esta es una combinación de uso tan frecuente que rsync proporciona la opción -a (archivo) como una forma abreviada de invocarlos a todos.

2. Copie un directorio a un directorio diferente

Si observa el comando rsync anterior, verá una barra diagonal final "/" en la ruta del archivo del directorio de origen. Esto es significativo. Le dice a rsync que copie el contenido del directorio. Si no proporciona la barra diagonal final, rsync copiará el directorio y su contenido.

 rsync -av /inicio/dave/archivos-del-proyecto /inicio/dave/Documentos/ 

Copiar el directorio y su contenido a un directorio diferente en la misma computadora con rsync

Esta vez, el nombre del directorio se agrega al nombre del archivo a medida que se enumeran. Si miramos dentro del directorio de destino, veremos que la carpeta de origen se ha copiado con los archivos que contiene.

 ls Documentos/
 ls Documentos/archivos-de-proyecto/ 

Listado de los archivos copiados en el directorio transferido

3. Copie un directorio a una unidad diferente

Copiar archivos a otra ubicación en el mismo disco duro no le brinda protección contra fallas en el disco. Si esa unidad se rinde, habrá perdido las copias de origen y destino de esos archivos. Copiarlos a otro disco duro es una forma mucho más robusta de proteger sus datos. Todo lo que tenemos que hacer es proporcionar la ruta correcta a la unidad de destino.

 rsync -av /home/dave/archivos-del-proyecto /ejecutar/montar/drive2 

Copiar archivos a un disco duro diferente en la misma computadora

Mirar el otro disco duro nos muestra el directorio y los archivos que se copiaron en él.

 ls ejecutar/montar/unidad2/proyecto-archivos/ 

Listado de archivos que fueron copiados a otro disco duro en la misma computadora

RELACIONADO: Qué hacer cuando falla su disco duro

4. Hacer una carrera en seco primero

Antes de ver cómo rsync puede eliminar archivos de manera útil para nosotros, veamos cómo podemos hacer que rsync realice una ejecución en seco.

En una ejecución de prueba, rsync realiza los movimientos para realizar las acciones que hemos pedido, pero en realidad no las realiza. Informa sobre lo que habría sucedido si se hubiera ejecutado el comando. De esta manera, podemos asegurarnos de que el comando haga exactamente lo que esperamos.

Para forzar una ejecución en seco usamos la opción --dry-run .

 rsync -av --dry-run /home/dave/geocoder /run/mount/drive2 

Realización de una ejecución en seco de un comando rsync

Los archivos que se habrían copiado se enumeran para nosotros, y obtenemos las estadísticas habituales, seguidas del mensaje (DRY RUN) para que sepamos que en realidad no ocurrió nada.

5. Eliminación de archivos en el directorio de destino

La opción --delete le dice a rsync que elimine archivos y directorios en el directorio de destino que no están en el directorio de origen. Esto significa que el directorio de destino será una copia exacta del directorio de origen. Seremos prudentes y usaremos la opción --dry-run primero.

 rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2 

Realización de una ejecución en seco de un comando rsync que podría eliminar archivos

Se nos informa que se eliminarán dos archivos. Si estamos seguros de que no nos importa que se eliminen, podemos eliminar la opción --dry-run y ejecutar el comando de verdad.

 rsync -av --delete /home/dave/geocoder /ejecutar/montar/drive2 

Copiar archivos y eliminar archivos del directorio de destino que no están en el directorio de origen

Esta vez se sincronizan los contenidos de los directorios y se eliminan los dos archivos adicionales.

6. Eliminación de los archivos de origen

Puede optar por eliminar los archivos de origen después de una transferencia exitosa , lo que hace que rsync funcione más como un movimiento que como una copia. Si la transferencia no se realizó correctamente, los archivos de origen no se eliminan. La opción que debemos usar es --remove-source-files .

 rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2 

Obligar a rsync a eliminar los archivos de origen después de una transferencia exitosa

Tenga en cuenta que los archivos se pueden eliminar incluso si no se transfiere ningún archivo. Esto se debe a que si rsync verifica, y todos los archivos ya están en el directorio de destino y no hay nada que hacer para rsync , rsync considera que la transferencia fue exitosa.

Además, rsync solo elimina los archivos del directorio de origen. No elimina el directorio de origen ni ningún subdirectorio, solo los archivos que contienen. Podemos ver esto usando la opción -R (recursiva) con ls , en el directorio fuente.

 ls -R geocodificador 

Un árbol de directorios vacío después de que rsync haya eliminado los archivos de origen

7. Copiar archivos a una computadora remota

Para sincronizar carpetas con una computadora remota, rsync debe estar instalado en ambas computadoras. Configure la comunicación SSH entre las dos computadoras antes de intentar usar rsync en la computadora remota.

Cómo crear e instalar claves SSH desde el shell de Linux
RELACIONADO Cómo crear e instalar claves SSH desde el shell de Linux

Debe poder iniciar sesión de forma remota como un usuario normal en la computadora remota para que rsync funcione. No importa si usa una identificación y una contraseña para iniciar sesión, o si configuró claves SSH para un acceso seguro sin contraseña, pero si no puede iniciar sesión como usuario, entonces rsync no funcionará. o.

Si inicia sesión con una contraseña, rsync le pedirá la contraseña. Si usa claves SSH para iniciar sesión, el proceso es perfecto.

Lo único adicional que debe hacer es agregar el nombre de la cuenta de usuario y la dirección IP de la computadora remota al inicio de la ruta del archivo de destino. Use un signo de arroba " @ " para separar el nombre de usuario del nombre de la computadora o la dirección IP, y dos puntos " : " para separar el nombre de la computadora o la dirección IP de la ruta del directorio.

En nuestra red de prueba, estos dos comandos son equivalentes.

 rsync -av /home/dave/geocodificador [email protected]:/home/dave/Descargas
 rsync -av /home/dave/geocodificador [email protected]:/home/dave/Descargas 

Copiar archivos a una computadora remota a través de SSH con rsync

Recibimos la misma información que cuando copiamos archivos localmente.

8. Incluir o excluir archivos o directorios

Es posible que tenga archivos y directorios en el directorio de origen que no desea copiar a la computadora de destino. Puede excluirlos usando la opción --exclude . De manera similar, puede optar por incluir archivos y directorios específicos con la opción --include .

La peculiaridad es que si usa la opción --include por sí sola, todos los archivos se copian normalmente, incluidos los archivos incluidos específicamente. Para copiar solo los archivos incluidos, debe --exclude todo lo demás.

Puede usar tantas opciones --include y --exclude en su comando como desee, pero asegúrese de poner sus opciones --include antes que sus opciones --exclude . Además, asegúrese de tener una barra diagonal final en la ruta del archivo de origen.

Este comando copia solo archivos de código fuente C y archivos de datos CSV en la computadora de destino.

 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder

Usando rsync para copiar archivos seleccionados a un disco duro diferente en la misma computadora

Los únicos archivos copiados son los que incluimos específicamente.

9. Comprimir archivos en transferencia

La opción -z (comprimir) hace que rsync comprima los archivos transferidos. Sin embargo, no se almacenan como archivos comprimidos en la computadora de destino, solo se comprimen durante la transferencia. Esto puede acelerar las transferencias largas.

 rsync -avz /home/dave/geocoder /ejecutar/montar/drive2 

Comprimir archivos a medida que se transfieren con la opción -z rsync

10. Seguimiento del progreso

Hablando de transferencias largas, podemos agregar algunas estadísticas para que podamos ver el progreso de la transferencia.

La opción -P (parcial, progreso) en realidad agrega dos opciones, --partial y --progress . La opción --partial le dice a rsync que conserve los archivos parcialmente transferidos si falla una transferencia. Esto ahorra tiempo cuando se reinicia la transferencia.

La opción --progress imprime, para cada archivo, los datos transferidos en bytes y como porcentaje, la velocidad de la transferencia, el tiempo que tomó, el número del archivo que se está transfiriendo y la cuenta de los archivos restantes.

 rsync -aP /home/dave/geocodificador /ejecutar/montar/drive2 

Uso de la opción -P para proporcionar estadísticas para la transmisión de cada archivo

La salida se desplaza bastante rápido y es difícil de leer. Puede mejorar ligeramente las cosas eliminando la opción -v (detallado) del comando. Incluso entonces, sigue siendo difícil de leer mientras pasa zumbando.

Estadísticas de transferencia para cada archivo transferido

A menudo es más útil monitorear el progreso de la transferencia general. Puede hacer esto con la opción –info y pasándole “progress2” como parámetro.

 sincronizar -a --info=progress2 /home/dave/geocoder/ejecutar/montar/drive2 

Estadísticas para la transferencia rsync general

Esto da un informe de progreso que es realmente útil.

Como cp en esteroides

El comando rsync es rápido, flexible y vale la pena el tiempo que lleva familiarizarse con él. La forma básica de un comando rsync con las opciones -av , el directorio de origen y el directorio de destino no es difícil de recordar.

Para muchos casos de uso, eso es todo lo que necesita. Ponte cómodo con eso y el resto vendrá fácilmente.

RELACIONADO: La guía para no principiantes sobre la sincronización de datos con Rsync