10 comando rsync de Linux para excluir archivos / directorios
Rsync (Remote Sync) es un comando más comúnmente utilizado para copiar y sincronizar archivos y directorios de forma remota y local en sistemas Linux / Unix. Con la ayuda del comando rsync, puede copiar y sincronizar sus datos de forma remota y local en directorios, discos y redes, realizar copias de seguridad de datos y duplicar entre dos máquinas Linux.
Rsync es una de las utilidades más útiles para un administrador de servidor, pero sincroniza todo de forma predeterminada, lo que puede resultar molesto si tu aplicación crea muchos archivos temporales. A continuación, se explica cómo excluir archivos al usar rsync.
Características importantes del comando rsync
- Velocidad : La primera vez, rsync replica todo el contenido entre los directorios de origen y destino. La próxima vez, rsync transfiere solo los bloques o bytes modificados a la ubicación de destino, lo que hace que la transferencia sea realmente rápida.
- Seguridad : rsync permite el cifrado de datos mediante el protocolo ssh durante la transferencia.
- Ancho de banda bajo: rsync usa compresión y descompresión de datos bloque por bloque en el extremo de envío y recepción, respectivamente. Por lo tanto, el ancho de banda utilizado por rsync será siempre menor en comparación con otros protocolos de transferencia de archivos como FTP.
- Privilegios : No se requieren privilegios especiales para instalar y ejecutar rsync.
La sintaxis básica de rsync es muy sencilla y funciona de manera similar a ssh, scp y cp.
$ sudo rsync options source destination
- -v: detallado.
- -r: copia datos de forma recursiva (pero no conserva las marcas de tiempo ni los permisos mientras transfiere datos).
- -a: modo de archivo, el modo de archivo permite copiar archivos de forma recursiva y también conserva enlaces simbólicos, permisos de archivos, propiedad de usuarios y grupos y marcas de tiempo.
- -z: comprime los datos del archivo.
- -h: números de salida legibles por humanos en un formato legible por humanos.
- -d: transferir directorios sin recurrir -e: especificar el ssh como shell remoto.
Primero, cree una estructura de directorio de muestra como se muestra a continuación (con algunos archivos vacíos) que se puede usar con fines de prueba.
$ cd ~ $ sudo mkdir -p source/dir1/dir2 $ sudo mkdir -p source/dir3 $ sudo touch source/file1.txt $ sudo touch source/file2.txt $ sudo touch source/dir1/dir2/file3.txt $ sudo touch source/dir3/file4.txt
Los comandos anteriores crearán un directorio de origen (en el directorio de inicio) con la siguiente estructura: Para ver la estructura del directorio de origen, escriba el siguiente comando.
$ sudo find source/
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1) Excluir un directorio específico
Primero quitamos destination
directorio si existe escribiendo debajo del comando.
$ sudo rm -rf destination
Si no queremos sincronizar el dir3
y sus subdirectorios desde la carpeta de origen a la de destino, usamos rsync --exclude
opción como se muestra a continuación.
$ sudo rsync -avz --exclude 'dir3' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude 'dir3' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt sent 307 bytes received 126 bytes 866.00 bytes/sec total size is 0 speedup is 0.00
2) Excluir un archivo específico
Si no queremos sincronizar el file3.txt
desde la carpeta de origen a la de destino, escribimos el siguiente comando.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude 'dir1/dir2/file3.txt' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ dir3/file4.txt sent 338 bytes received 130 bytes 936.00 bytes/sec total size is 0 speedup is 0.00
Por ejemplo, en tiempo real, donde desea sincronizar / var en un directorio de respaldo pero no desea incluir la caché y la carpeta tmp que generalmente no contienen contenido importante entre reinicios, puede usar el siguiente comando:
$ sudo rsync -aAXhv --exclude={"/var/cache","/var/tmp"} /var remoteuser@192.168.122.105:destination/
3) Excluir un tipo de archivo específico
Para excluir un específico con extensión específica, usamos el patrón apropiado. Por ejemplo, para excluir todos los archivos que contienen .txt
como extensión, escribimos el siguiente comando.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude '*.txt' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ dir1/ dir1/dir2/ dir3/ sent 136 bytes received 65 bytes 402.00 bytes/sec total size is 0 speedup is 0.00
4) Excluya varios directorios que coincidan con un patrón
Excluiremos cualquier directorio (o subdirectorios) bajo source/
que comienza con «dir»
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ $ sudo rsync -avz --exclude 'dir*' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt sent 168 bytes received 91 bytes 518.00 bytes/sec total size is 0 speedup is 0.00
5) Excluya varios archivos y directorios al mismo tiempo
Primero, cree un archivo de texto con una lista de todos los archivos y directorios que no desea respaldar. Esta es la lista de archivos y directorios que desea excluir del rsync.
$ sudo nano exclude-list.txt
file2.txt dir3/file4.txt
A continuación, ejecute rsync usando --exclude-from
opción con la exclude-list.txt
Como se muestra abajo.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude-from 'exclude-list.txt' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude-from 'exclude-list.txt' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/ sent 277 bytes received 111 bytes 776.00 bytes/sec total size is 0 speedup is 0.00
6) La ruta de exclusión siempre es relativa
La opción de exclusión parece tener una ruta completa (es decir, /dir3/file4.txt). Pero, desde el punto de vista de rsync, la ruta de exclusión siempre es relativa y se tratará como dir3 / file4.txt. En el siguiente ejemplo, rsync buscará dir3 en el directorio de origen (y no en el directorio / root).
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '/dir3/file4.txt' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude '/dir3/file4.txt' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/ sent 334 bytes received 130 bytes 928.00 bytes/sec total size is 0 speedup is 0.00
Es similar al comando siguiente.
$ sudo rsync -avz --exclude 'dir3/file4.txt' source/ destination/
7) Excluir archivos de la línea de comando
También puede excluir archivos directamente desde la línea de comando, esto es útil cuando tiene un número menor de archivos para excluir. Por ejemplo, si deseamos sincronizar / fuente a un directorio de destino pero no desea incluir archivos file3.txt y file4.txt, podemos usar el siguiente comando.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude={"/dir1/dir2/file3.txt","/dir3/file4.txt"} source/ destinaton/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude={"/dir1/dir2/file3.txt","/dir3/file4.txt"} source/ bobby@192.168.122.105:destination/
output sending incremental file list ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ sent 268 bytes received 73 bytes 682.00 bytes/sec total size is 0 speedup is 0.00
8) Excluya varios archivos o carpetas
Cuando queremos excluir tipo de archivos *.txt
y carpeta específica dir3
, podemos escribir el comando a continuación.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' --exclude 'dir3' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude '*.txt' --exclude 'dir3' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ dir1/ dir1/dir2/ sent 109 bytes received 61 bytes 340.00 bytes/sec total size is 0 speedup is 0.00
9) Excluya varios directorios con un patrón específico
También podemos proporcionar varios directorios con un patrón específico para excluir. Usaremos comodines *
completar dir
nombre del directorio.
$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --exclude 'dir*' source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt sent 168 bytes received 91 bytes 518.00 bytes/sec total size is 0 speedup is 0.00
10) Excluir archivos de ciertos tamaños
Durante el proceso de copia de seguridad, nos encontramos con que algunos archivos de gran tamaño tardaron mucho en copiarse. tenemos que copiar algunas películas que tienen un tamaño superior a 1 GB. Por lo tanto, creemos que sería mejor si pudiéramos simplemente excluir los archivos grandes o cualquier archivo sin importancia para completar la copia de seguridad lo antes posible.
Por ejemplo, queremos excluir archivos de más de 3 MB de tamaño. Todo lo que tenemos que hacer es usar --max-size=SIZE
opción con el comando rsync. Esta opción no transferirá ningún archivo más grande que el tamaño especificado.
$ sudo rm -rf destination
$ sudo rsync -avz --max-size=3m source/ destination/
Para la sincronización remota, podemos escribir el comando a continuación.
$ sudo rsync -avz --max-size=3m source/ bobby@192.168.122.105:destination/
output sending incremental file list created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir1/dir2/Bootstrap-tutorial.pdf dir1/dir2/file3.txt dir3/ dir3/file4.txt sent 3,080,297 bytes received 168 bytes 6,160,930.00 bytes/sec total size is 8,101,480 speedup is 2.63
También podemos usar --min-size=SIZE
para excluir cualquier archivo más pequeño que el tamaño especificado.
por ejemplo, para excluir archivos de menos de 7 MB, ejecute el siguiente comando.
$ sudo rsync -avz --min-size=7m source/ destination/
output sending incremental file list created directory destination ./ dir1/ dir1/dir2/ dir3/ sent 313 bytes received 65 bytes 756.00 bytes/sec total size is 8,101,480 speedup is 21,432.49
Los sufijos de tamaños son los siguientes:
- «K» (o «KiB») es un kilobyte (1024)
- «M» (o «MiB») es un megabyte (1024 * 1024)
- «G» (o «GiB») es un gigabyte (1024 * 1024 * 1024)
Si desea que el multiplicador sea 1000 en lugar de 1024, use «KB», «MB» o «GB» (Nota: también se aceptan minúsculas para todos los valores).
¡Espero que hayan disfrutado este tutorial! Por favor deje sus comentarios
Leer también: