LINUX

10 comando rsync de Linux para excluir archivos / directorios

Comandos de exclusión de Linux Rsync

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:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar