Ejemplos de Rsync para transferir archivos en Linux
En el sistema operativo Linux, ‘rsync’ significa Rser emocionado Sync. Es una utilidad que se utiliza para sincronizar (copiar) archivos y directorios desde una fuente (SRC) a un destino (DEST).
Los archivos y directorios se pueden sincronizar en un host local o desde / hacia un host remoto. En el SRC, los archivos y directorios se sincronizarán. Mientras que, en el DEST, se llevarán a cabo los archivos y directorios sincronizados.
Además, el comando rsync puede copiar archivos y directorios de forma recursiva, copiar enlaces simbólicos, preservar (permisos, grupo, tiempo de modificación y propiedad) la identidad del archivo.
Rsync puede usar dos formas diferentes para sincronizar / copiar archivos o directorios:
- Utilice shell remoto: ssh o rsh
- Utilice el demonio rsync directamente a través de TCP
Aún más, rsync usa un algoritmo de transferencia delta que solo copia / sincroniza los diferentes datos entre SRC y DEST.
Este tutorial explicará muchas formas de usar el comando rsync a través de prácticas y ejemplos. También explicaremos en detalle las opciones más comunes del comando rsync.
Sintaxis del comando Rsync
Antes de profundizar en las formas de usar el comando rsync, echemos un vistazo a su sintaxis:
$ rsync [options] <SRC_PATH> <DEST_PATH>
1. Copiar / sincronizar archivo en la máquina local
El comando Rsync se puede usar para copiar / sincronizar archivos en su máquina local.
Suponiendo que desea copiar un archivo del directorio de inicio del usuario ‘linoxide’ llamado ‘/ home / linoxide’ a la carpeta ‘/ opt / test’.
$ sudo rsync -zvh /home/linoxide/computer-networking.pdf /opt/test/ computer-networking.pdf sent 1.01K bytes received 35 bytes 2.10K bytes/sec total size is 3.03K speedup is 2.89
Dónde:
-z
: comprimir
-v
: verbose la salida
-h
: legible por humanos
2. Copiar / sincronizar directorio en la máquina local
Para transferir todos los archivos del directorio local SRC al directorio DEST, ejecute el comando rsync con la opción -zavh
.
Suponiendo que desea copiar el directorio de inicio del usuario ‘linoxide’ llamado ‘/ home / linoxide’ a la carpeta ‘/ opt / backup’.
$ sudo rsync -zavh /home/linoxide/ /opt/backup/ sending incremental file list ./ .bash_history .bash_logout .bashrc .lesshst .profile .sudo_as_admin_successful .viminfo computer-networking.pdf .ssh/ .ssh/known_hosts sent 4.85K bytes received 198 bytes 10.10K bytes/sec total size is 9.59K speedup is 1.90
Dónde:
-a
: archivar datos durante el proceso de copia / sincronización
¿Puede verificar si el comando rsync fue exitoso o no? Ejecute el siguiente comando:
$ ls /opt/backup/ -la total 40 drwxr-xr-x 3 linoxide linoxide 4096 Thg 6 15 16:02 . drwxr-xr-x 4 root root 4096 Thg 6 15 16:25 .. -rw------- 1 linoxide linoxide 817 Thg 6 15 16:01 .bash_history -rw-r--r-- 1 linoxide linoxide 220 Thg 6 11 15:58 .bash_logout -rw-r--r-- 1 linoxide linoxide 3771 Thg 6 11 15:58 .bashrc -rw-rw-r-- 1 linoxide linoxide 3028 Thg 2 25 2017 computer-networking.pdf -rw------- 1 linoxide linoxide 40 Thg 6 15 15:51 .lesshst -rw-r--r-- 1 linoxide linoxide 807 Thg 6 11 15:58 .profile drwx------ 2 linoxide linoxide 4096 Thg 6 13 17:58 .ssh -rw-r--r-- 1 linoxide linoxide 0 Thg 6 15 16:02 .sudo_as_admin_successful -rw------- 1 linoxide linoxide 680 Thg 6 14 16:50 .viminfo
3. Rsync sobre ssh con un puerto específico
Puede usar ssh (shell seguro) para copiar / sincronizar datos, sus datos se transferirán en una conexión segura con cifrado. Nadie puede leer sus datos mientras se transfieren a Internet. Cuando usa el comando rsync, debe proporcionar la contraseña de usuario / root para realizar la tarea en particular. El uso de la opción SSH enviará sus inicios de sesión de manera encriptada para que su contraseña esté segura.
Copie un archivo de un remoto a un local con un puerto ssh específico. Para especificar un protocolo con el comando rsync, debe usar -e
opción con el nombre de protocolo que desea utilizar.
Por ejemplo, el siguiente comando rsync copiará el archivo ‘deploy.yaml’ a través de un shell remoto desde una máquina remota al directorio de inicio del usuario ‘linoxide’.
$ rsync -avz -e "ssh -p 22" cas@10.9.8.41:/home/cas/deploy.yaml /home/linoxide/ cas@10.9.8.41's password: receiving incremental file list sent 20 bytes received 60 bytes 32.00 bytes/sec total size is 239 speedup is 2.99
4. Copie / sincronice archivos y directorios de la máquina local a la máquina remota
Suponiendo que desea copiar / sincronizar la carpeta ‘test-data’ en el directorio de inicio del usuario ‘linoxide’ en el host local al directorio de inicio de una máquina remota ‘cas@10.9.8.41’, ejecute el comando:
$ rsync -azrvh /home/linoxide/computer-networking.pdf cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list computer-networking.pdf sent 1.04K bytes received 35 bytes 430.80 bytes/sec total size is 3.03K speedup is 2.81
Dónde:
-r
: copia recursiva
5. Copie / sincronice archivos y directorios de una máquina remota a una máquina local
El comando rsync le ayuda a transferir un ‘documento’ de directorio remoto para ser copiado en su host local.
Suponiendo que desea copiar / sincronizar archivos / directorios desde un host remoto ‘cas@10.9.8.41’ al directorio de inicio del usuario ‘linoxide’.
Por ejemplo:
$ rsync -zavhr cas@10.9.8.41:document /home/linoxide cas@10.9.8.41's password: receiving incremental file list document/ document/kubernetes.txt sent 47 bytes received 139 bytes 74.40 bytes/sec total size is 0 speedup is 0.00
6. Opciones de Rsync -include y -exclude
Estas dos opciones nos permiten incluir y excluir archivos especificando parámetros con esta opción nos ayuda a especificar aquellos archivos o directorios que desea incluir en su sincronización y excluir archivos y carpetas que no desea que se transfieran.
Aquí, en este ejemplo, el comando rsync incluirá solo aquellos archivos y directorios que comiencen con ‘k’ y excluirá todos los demás archivos y directorios.
$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' cas@10.9.8.41: /home/linoxide cas@10.9.8.41's password: receiving incremental file list ./ k8s.yaml kubernetes.yaml kuber/ sent 88 bytes received 280 bytes 147.20 bytes/sec total size is 73 speedup is 0.20
7. Establecer el tamaño máximo de los archivos
Puede especificar el tamaño máximo de archivo que se va a transferir o sincronizar. Puede hacerlo con la opción ‘–max-size’.
En el siguiente ejemplo, el tamaño máximo de archivo es 200k, por lo que este comando transferirá solo aquellos archivos que sean iguales o menores a 200k.
$ rsync -zavhr --max-size="200k" cas@10.9.8.41: /home/linoxide cas@10.9.8.41's password: receiving incremental file list .bash_history .bash_logout .bashrc .profile .sudo_as_admin_successful .viminfo computer-networking.pdf sent 2.58K bytes received 51.60K bytes 21.67K bytes/sec total size is 113.24K speedup is 2.09
8. Elimine los archivos de origen después de una transferencia exitosa.
Ahora, suponga que tiene un servidor web y un servidor de respaldo de datos, creó una copia de respaldo diaria y la sincronizó con su servidor de respaldo, ahora no desea mantener esa copia local de respaldo en su servidor web. Entonces, ¿esperará a que se complete la transferencia y luego eliminará ese archivo de respaldo local manualmente? Claro que no. Esta eliminación automática se puede hacer usando la opción ‘–remove-source-files’.
$ ls /home/directory computer-networking.pdf deploy.yaml document k8s.yaml kuber kubernetes.yaml ------ $ rsync -azvh --remove-source-files /home/linoxide/deploy.yaml cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list sent 70 bytes received 20 bytes 36.00 bytes/sec total size is 239 speedup is 2.66
Ejecute el comando ‘ls’ nuevamente, puede ver que el archivo ‘deploy.yaml’ se eliminó en SRC.
$ ls computer-networking.pdf document k8s.yaml kuber kubernetes.yaml
9. Encuentre la diferencia en archivos y directorios entre SRC y DEST
Para encontrar alguna diferencia en los archivos de directorios entre SRC y DEST, puede ejecutar el comando rsync con la opción ‘-i’.
$ rsync -avzi /home/linoxide/cloud cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list cd+++++++++ cloud/ <f+++++++++ cloud/computer-networking.pdf <f+++++++++ cloud/k8s.yaml <f+++++++++ cloud/kubernetes.yaml cd+++++++++ cloud/document/ <f+++++++++ cloud/document/kubernetes.txt cd+++++++++ cloud/kuber/ <f+++++++++ cloud/kuber/test.txt sent 1,472 bytes received 127 bytes 1,066.00 bytes/sec total size is 3,101 speedup is 1.94
10. Limita el ancho de banda
Puede establecer la limitación del ancho de banda al ejecutar el comando rsync con la opción ‘–bwlimit =
Suponiendo que desea limitar la velocidad de transferencia de datos a 300 KB / s, ejecute el comando:
$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list coursera.png sent 2.93M bytes received 35 bytes 234.48K bytes/sec total size is 3.00M speedup is 1.02
11. Reanude la transferencia cuando falló en scp
A veces, debe transferir un archivo muy grande a través del comando scp, pero obtuvo un error al copiar y no pudo comenzar a transferir nuevamente usando el comando scp debido al gran tamaño del archivo y al consumo de tiempo.
En esta situación, puede usar el comando rsync para comenzar a copiar el archivo de donde obtuvo el error. Por ejemplo, copiar un archivo ISO grande en el directorio de inicio al host remoto ‘cas@10.9.8.41’
$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41: cas@10.9.8.41's password: ubuntu-18.04.4-live-server-amd64.iso 32% 278MB 86.7MB/s 00:06 ETA^
El proceso ha sido eliminado por el usuario. En ese momento, se transfirió el 32% del archivo. Ahora, puede continuar con el trabajo actual ejecutando rsync:
$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list ubuntu-18.04.4-live-server-amd64.iso 912.26M 100% 15.89MB/s 0:00:54 (xfr#1, to-chk=0/1) sent 541.25M bytes received 132.44K bytes 9.25M bytes/sec total size is 912.26M speedup is 1.69

12. Muestra el progreso durante la transferencia de datos.
Si desea ver el progreso transferido al ejecutar el comando rsync, puede usar la opción ‘–progress’.
Mostrará los archivos y el tiempo restante para completar la copia.
Por ejemplo:
$ rsync -avh --progress /home/linoxide/cloud/ cas@10.9.8.41: cas@10.9.8.41's password: sending incremental file list ./ computer-networking.pdf 3.03K 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=8/10) coursera.png 3.00M 100% 114.38MB/s 0:00:00 (xfr#2, to-chk=7/10) k8s.yaml 39 100% 1.52kB/s 0:00:00 (xfr#3, to-chk=6/10) kubernetes.yaml 34 100% 1.33kB/s 0:00:00 (xfr#4, to-chk=5/10) ubuntu-18.04.4-live-server-amd64.iso 912.26M 100% 89.60MB/s 0:00:09 (xfr#5, to-chk=4/10) document/ document/kubernetes.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=1/10) kuber/ kuber/test.txt 0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=0/10) sent 915.49M bytes received 164 bytes 79.61M bytes/sec total size is 915.26M speedup is 1.00

Conclusión
En este tutorial, aprendimos cómo usar el comando rsync con algunos ejemplos para copiar o sincronizar archivos / directorios.
Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.