LINUX

10 Comando rsync de Linux para excluir archivos/directorios

Comandos de exclusión de Linux Rsync

Rsync (Remote Sync) es un comando que se usa más comúnmente para copiar y sincronizar archivos y directorios de forma remota y local en sistemas Linux/Unix. Con el comando rsync, puede copiar y sincronizar datos de forma remota y local a través de 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 servidores, pero sincroniza todo de forma predeterminada, lo que puede ser molesto si su aplicación crea muchos archivos temporales. Aquí se explica cómo excluir archivos cuando se usa 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 muy 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 siempre será menor en comparación con otros protocolos de transferencia de archivos como FTP.
  • privilegiado : No se requieren privilegios especiales para instalar y ejecutar rsync.

La sintaxis básica de rsync es muy simple y funciona de manera similar a ssh, scp y cp.

$ sudo rsync options source destination
  • -v : detallado.
  • -r: copia los datos de forma recursiva (pero no conserva las marcas de tiempo ni los permisos durante la transferencia de datos).
  • -a: modo de archivo, el modo de archivo permite que los archivos se copien recursivamente y también conserva enlaces simbólicos, permisos de archivos, propiedades de usuarios y grupos, y marcas de tiempo.
  • -z: Comprimir datos de archivo.
  • -h : números legibles por humanos, salida en un formato legible por humanos.
  • -d: transferir directorios sin recurso -e: especificar ssh como shell remoto.

Primero, cree una estructura de directorio de ejemplo 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 (bajo el directorio raíz) 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 sacamos destination directorio si existe escribiendo debajo del comando.

$ sudo rm -rf destination

Si no queremos sincronizar dir3 y sus subdirectorios desde la carpeta de origen hasta la carpeta 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 ingresar el siguiente comando.

$ 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 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 ingresar el siguiente comando.

$ 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, cuando desea rsync /var en un directorio de copia de seguridad, pero no desea incluir la carpeta de caché y 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 uno específico con una extensión específica, usamos el patrón apropiado. Por ejemplo, para excluir todos los archivos que contengan .txt como una extensión, ingresamos el comando a continuación.

$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' source/ destination/

Para la sincronización remota, podemos ingresar el siguiente comando.

$ 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) Excluir varios directorios que coincidan con un patrón

Excluiremos cualquier directorio (o subdirectorios) a continuación source/ que empieza con «dir»

$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/

Para la sincronización remota, podemos ingresar el siguiente comando.

$ $ 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) Excluir múltiples 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 de rsync.

$ sudo nano exclude-list.txt
  file2.txt
  dir3/file4.txt

A continuación, ejecute rsync usando --exclude-from opción con 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 ingresar el siguiente comando.

$ 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 ingresar el siguiente comando.

$ 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 siguiente comando.

$ sudo rsync -avz --exclude 'dir3/file4.txt' source/ destination/

7) Excluir los archivos de la línea de comando

también puede excluir archivos directamente desde la línea de comando, esto es útil cuando tiene una cantidad menor de archivos para excluir. Por ejemplo, si queremos sincronizar /source con un directorio de destino, pero no queremos incluir 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 ingresar el siguiente comando.

$ 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) Excluir múltiples archivos o carpetas

Cuando queremos excluir el tipo de archivos *.txt y una carpeta especifica dir3podemos ingresar el comando a continuación.

$ sudo rm -rf destination
$ sudo rsync -avz --exclude '*.txt' --exclude 'dir3' source/ destination/

Para la sincronización remota, podemos ingresar el siguiente comando.

$ 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) Excluir múltiples directorios con un patrón específico

También podemos proporcionar múltiples directorios con un patrón específico para la exclusión. Usaremos comodines * para terminar dir el nombre del director.

$ sudo rm -rf destination
$ sudo rsync -avz --exclude 'dir*' source/ destination/

Para la sincronización remota, podemos ingresar el siguiente comando.

$ 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 con ciertos tamaños

Durante el proceso de copia, nos encontramos con algunos archivos grandes para copiar. necesitamos copiar algunas películas que tienen más de 1 GB de tamaño. Por lo tanto, creemos que sería mejor si simplemente pudiéramos excluir archivos grandes o archivos sin importancia para completar la copia de seguridad lo antes posible.

Por ejemplo, queremos excluir archivos de más de 3 MB. Todo lo que tenemos que hacer es usarlo. --max-size=SIZE opción con el comando rsync. Esta opción no transferirá archivos más grandes que el tamaño especificado.

$ sudo rm -rf destination
$ sudo rsync -avz --max-size=3m source/ destination/

Para la sincronización remota, podemos ingresar el siguiente comando.

$ 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ño 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 letras minúsculas para todos los valores).

¡Espero que disfrutes este tutorial! Por favor deje sus comentarios

Lea 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