El comando rsync de Linux es una potente herramienta de copia de archivos y sincronización de carpetas. En este artículo se muestran algunos ejemplos prácticos que puedes usar con tu sistema operativo Linux.
La herramienta rsync
La herramienta rsync copia archivos y directorios entre dos ordenadores. Utiliza un sofisticado algoritmo que explora los árboles de directorios para encontrar archivos en el ordenador de origen que no existen en el ordenador de destino. Estos archivos se transmiten al ordenador de destino. Lo que hace a rync tan inteligente es que puede averiguar qué partes de los archivos existentes han sido modificadas, y sólo envía las partes cambiadas.
Puede leer también | Comandos Linux destructivos que deberías de tener cuidado al ejecutar
Puedes utilizar rsync para copiar archivos en una ubicación diferente de tu disco duro, en otro disco duro del mismo ordenador, en una unidad USB conectada externamente o en cualquier otra ubicación accesible por la red.
A pesar de todas sus opciones, la estructura de un comando rsync es simple. Necesitamos proporcionar el origen, el destino y las opciones que queremos utilizar. Probablemente encontrarás que rsync ya está instalado en tu ordenador Linux -lo estaba, en todas nuestras máquinas de prueba- pero si no lo está definitivamente estará en los repositorios de tu distribución.
Puedes leer también | 10 divertidos línea de comandos de Linux que deberías probar cuando estés aburrido
1. Copiar un directorio a otro directorio
Si no proporciona la barra diagonal final, rsync copiará el directorio y su contenido.
$rsync -av /home/carlos/archivos-de-proyecto /home/carlos/Documentos/
This time the directory name is added to the file name as they are listed. If we look inside the destination directory we’ll see the source folder has been copied across with the files inside it.
$ls Documents/
$ls Documents/project-files/
2. Copiar un directorio en una unidad diferente
Copiar los archivos a otra ubicación en el mismo disco duro no le da protección contra un fallo de la unidad. Si la unidad se estropea, perderá las copias de origen y destino de esos archivos. Copiarlos en otro disco duro es una forma mucho más sólida de proteger los datos. Todo lo que tenemos que hacer es proporcionar la ruta correcta a la unidad de destino.
$rsync -av /home/carlos/project-files /run/mount/drive2
3. Copiar archivos a un directorio diferente
Aquí tenemos un ejemplo sencillo para ponernos en marcha. Vamos a copiar los archivos del directorio "project-files" al directorio "Documentos". Usaremos dos opciones, la opción -a (archive) y la opción -v (verbose). La opción verbose le dice a rsync que explique lo que está haciendo mientras lo hace. La opción archive preserva la propiedad de los archivos y algunos otros elementos que veremos en breve.
Puedes leer también | ¿Cuál seria la forma de acceder al historial de comandos en Linux?
El formato del comando es opciones origen-ubicación destino-ubicación.
$rsync -av /home/carlos/project-files/ /home/carlos/Documentos/
Mientras rsync funciona, los archivos aparecen a medida que se copian. Se nos dice:
- El número de bytes que se envían.
- El número de bytes recibidos. Antes de que la transferencia de archivos se lleve a cabo, rsync tiene que averiguar qué archivos necesitan ser transferidos. Para hacer eso, alguna información sobre los archivos en el destino debe ser recuperada por rsync . Esta información está contenida en los bytes recibidos.
- La velocidad de la transferencia.
- El tamaño total de los archivos copiados.
- El "speedup". Es la relación entre el tamaño total dividido por la suma de los bytes enviados y recibidos. Cuanto más alto sea este número, más eficiente será la transferencia.
- Modificamos el archivo de texto en el directorio de origen y repetimos el comando rsync.
$rsync -av /home/carlos/archivos-de-proyecto/ /home/carlos/Documentos/
4. Haciendo una ejecución en seco primero
Antes de ver cómo rsync puede eliminar archivos de forma útil para nosotros, veamos cómo podemos hacer que rsync realice una ejecución en seco.
En una ejecución en seco, rsync pasa por los movimientos de realizar las acciones que hemos pedido, pero no las hace realmente. Informa de lo que habría ocurrido si el comando se hubiera ejecutado. De esta manera, podemos asegurarnos de que el comando hace exactamente lo que esperamos.
Puede leer también | 7 comandos vitales para comenzar con Python para principiantes
Para forzar una ejecución en seco utilizamos la opción --dry-run.
$rsync -av --dry-run /home/carlos/geocoder /run/mount/drive2
Los archivos que se habrían copiado se enumeran para nosotros, y obtenemos las estadísticas habituales, seguidas por el mensaje (DRY RUN) para que sepamos que nada tuvo lugar realmente.
5. Eliminación de archivos en el directorio de destino
La opción --delete indica a rsync que elimine los archivos y directorios del 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 utilizaremos primero la opción --dry-run.
$rsync -av --delete --dry-run /home/carlos/geocoder /run/mount/drive2
Se nos informa de que se borrarán dos archivos. Si estamos seguros de que no nos importa que se borren, podemos eliminar la opción --dry-run y ejecutar el comando de verdad.
$rsync -av --delete /home/carlos/geocoder /run/mount/drive2
6. Eliminación de los archivos de origen
Puede elegir eliminar los archivos de origen después de una transferencia exitosa, haciendo que rsync funcione más como un movimiento que como una copia. Si la transferencia no fue exitosa, los archivos fuente no son borrados. La opción que necesitamos usar es --remove-source-files .
$rsync -av --remove-source-files /home/carlos/geocoder /run/mount/drive2
Tenga en cuenta que los archivos pueden ser eliminados incluso si no se transfiere ningún archivo. Esto es porque si rsync comprueba, y todos los archivos ya están en el directorio de destino y no hay nada que rsync pueda hacer, rsync considera que es una transferencia exitosa.
Puede leer también | Generar imagen ISO a partir de comandos GNU/Linux
Además, rsync sólo borra los archivos del directorio de origen. No borra el directorio de origen ni los subdirectorios, sólo los archivos que hay en ellos. Podemos ver esto usando la opción -R (recursiva) con ls, en el directorio fuente.
$ls -R geocoder
7. Copiar archivos a un ordenador remoto
Para sincronizar carpetas con un ordenador remoto, rsync debe estar instalado en ambos ordenadores. Configure la comunicación SSH entre los dos ordenadores antes de intentar utilizar rsync en el ordenador remoto.
Puede leer también | Cuidado con estos comandos peligrosos en Linux
Para que rsync funcione, es necesario poder iniciar sesión de forma remota como un usuario normal en el ordenador remoto. No importa si utilizas un ID y una contraseña para iniciar sesión, o si has configurado claves SSH para un acceso seguro sin contraseña, pero si no puedes iniciar sesión como usuario, entonces rsync tampoco funcionará.
Si te conectas con una contraseña, rsync te pedirá la contraseña. Si utilizas las claves SSH para iniciar la sesión, el proceso es perfecto.
Lo único que tienes que hacer es añadir el nombre de la cuenta de usuario y la dirección IP del ordenador remoto al principio de la ruta del archivo de destino. Utilice una arroba "@" para separar el nombre de usuario del nombre del ordenador o la dirección IP, y dos puntos ":" para separar el nombre del ordenador o la dirección IP de la ruta del directorio.
Puede leer también | Comandos GNU/Linux muy utiles en casos de duda
En nuestra red de prueba, estos dos comandos son equivalentes.
$rsync -av /home/carlos/geocoder Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/carlos/Downloads
$rsync -av /home/carlos/geocoder Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/carlos/Downloads
Otros artículos de interes: