Cómo excluir archivos y carpetas (directorios) con Rsync en Linux

27 feb 2021 2 min di lettura
Cómo excluir archivos y carpetas (directorios) con Rsync en Linux
Tabla de contenidos

Introducción

Rsync es una utilidad de línea de comandos rápida y versátil que sincroniza archivos y carpetas entre dos ubicaciones en un shell remoto.

Con Rsync, puede reflejar datos, crear copias de seguridad incrementales y copiar archivos entre sistemas. Al copiar datos, es posible que desee excluir uno o más archivos o directorios por nombre o ubicación.

En este tutorial, le mostraremos cómo excluir archivos y directorios con rsync.

Antes de empezar

Debe tener una comprensión básica de cómo funciona rsync.

En los siguientes ejemplos, usaremos rsync con la opción -a Esto permite a rsync sincronizar directorios de forma recursiva, transferir dispositivos especiales y bloquear y preservar enlaces simbólicos, tiempos de modificación, grupos, propiedad y permisos.

Al excluir archivos o directorios, se deben utilizar sus rutas relativas al directorio de origen.

Hay dos opciones para especificar los archivos y carpetas que desea excluir:

  • Desde una línea de comando, usando la opción --exclude
  • Desde un archivo, usando la --exclude-from.

Excluir un archivo específico

Para excluir un archivo específico, especifique la ruta relativa al archivo con la opción --exclude

En el siguiente ejemplo, el src_directory/file.txt no se transferirá:

rsync -a --exclude 'file.txt' src_directory/dst_directory/

Excluir un directorio específico

Excluir un directorio específico es lo mismo que excluir un archivo, simplemente pase la ruta relativa del directorio con la --exclude como se muestra a continuación:

rsync -a --exclude 'dir1' src_directory/dst_directory/

Si desea excluir el contenido del directorio pero no el directorio en sí, use dir1/* lugar de dir1:

rsync -a --exclude 'dir1/*' src_directory/dst_directory/

Excluir varios archivos o directorios

Para excluir varios archivos o directorios, simplemente especifique varias opciones de --exclude

rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/dst_directory/

Si prefiere utilizar una sola --exclude, puede enumerar los archivos y directorios que desea excluir entre llaves {} separados por una coma como se muestra a continuación:

rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/dst_directory/

Si la cantidad de archivos y /o directorios que desea excluir es grande, en lugar de usar varias --exclude, puede especificar los archivos y carpetas que desea excluir en un archivo y especificar el archivo con la --exclude-from.

El siguiente comando hace exactamente lo mismo que el anterior:

nano exclude-file.txt

Escriba la lista de archivos y carpetas que desea excluir:

file1.txt
 dir1/*
 dir2

Luego ejecute el comando que especifica el archivo:

rsync -a --exclude-from='exclude-file.txt' src_directory/dst_directory/

Excluya varios archivos o directorios según un patrón

Con rsync también puede excluir archivos y directorios según un patrón que coincida con el nombre del archivo o directorio.

Por ejemplo, para excluir todos los .jpg, ejecutaría:

rsync -a --exclude '*.jpg*' src_directory/dst_directory/

Es un poco más complicado excluir todos los demás archivos y directorios, excepto aquellos que coinciden con un cierto tipo. Supongamos que desea excluir todos los demás archivos y directorios, excepto los archivos que terminan en .jpg.

Una opción es usar el siguiente comando:

rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/dst_directory/

Cuando se utilizan varias opciones de inclusión /exclusión, se aplica la primera regla de coincidencia.

  • --include='*.jpg' - Primero incluimos todos los archivos .jpg
  • --include='*/' - Luego incluimos todos los directorios dentro del directorio src_directory Sin este rsync, copie los *.jpg solo en el directorio de nivel superior.
  • -m - Elimina directorios vacíos.

Otra opción sería redirigir la salida del comando de búsqueda a rsync:

find src_directory/-name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/dst_directory/
  • -printf %P\\0\\n - eliminará src_directory/ de la ruta del archivo.
  • --files-from=- - significa incluir solo archivos de entrada estándar (archivos pasados por el comando de búsqueda).

Conclusión

En este tutorial, aprendió cómo excluir archivos y directorios al transferir datos con Rsync. Hay mucho más que saber sobre Rsync en la página del Manual del usuario de Rsync.

Únase a la conversación

Buy me a coffeeBuy me a coffee

Apóyenos si le gusta nuestro contenido. Gracias.

Genial! A continuación, complete el pago para obtener acceso completo a Noviello.it.
Bienvenido de nuevo! Has iniciado sesión correctamente.
Te has suscrito correctamente a Noviello.it.
Éxito! Su cuenta está completamente activada, ahora tiene acceso a todo el contenido.
Éxito! Su información de facturación ha sido actualizada.
Su facturación no se actualizó.