GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo excluir archivos y directorios con Rsync

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

Con Rsync puede duplicar 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 según su nombre o ubicación.

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

Antes de comenzar #

Debe tener un conocimiento básico de cómo funciona rsync.

En los ejemplos a continuación, usaremos rsync con -a , opción. Esto le dice a rsync que sincronice directorios de forma recursiva, transfiera dispositivos especiales y de bloqueo y conserve enlaces simbólicos, tiempos de modificación, grupo, propiedad y permisos.

Al excluir archivos o directorios, debe usar sus rutas relativas al directorio de origen.

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

  • Desde una línea de comandos , utilizando --exclude opción.
  • Desde un archivo , usando el --exclude-from opción.

Excluir un número de archivo específico

Para excluir un archivo específico, pase la ruta relativa al archivo a --exclude opción.

En el siguiente ejemplo, el archivo src_directory/file.txt no será transferido:

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

Excluir un número de directorio específico

Excluir un directorio específico es lo mismo que excluir un archivo, simplemente pase la ruta relativa al directorio a --exclude opción 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/* en lugar de dir1 :

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

Excluir varios archivos o directorios #

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

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

Si prefiere usar un único --exclude opción 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 el número de archivos y/o directorios que desea excluir es grande, en lugar de usar múltiples --exclude opciones puede especificar los archivos y directorios que desea excluir en un archivo y pasar el archivo a --exclude-from opción.

El siguiente comando hace exactamente lo mismo que el anterior:

rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
excluir-archivo.txt
file1.txt
dir1/*
dir2

Excluir 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 todo .jpg archivos que 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 determinado patrón. 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 estamos incluyendo todos los .jpg archivos.
  • --include='*/' - Entonces estamos incluyendo todos los directorios dentro de src_directory directorio. Sin este rsync solo copiará *.jpg archivos en el directorio de nivel superior.
  • -m - Elimina los directorios vacíos.

Otra opción sería canalizar la salida de find comando para rsync:

find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
  • -printf %P\\0\\n - eliminará el src_directory/ desde la ruta del archivo.
  • --files-from=- - significa incluir solo los archivos de la entrada estándar (archivos pasados ​​desde 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 aprender sobre Rsync en la página del Manual del usuario de Rsync.


Linux
  1. Cómo comprimir archivos y directorios en Linux (con ejemplos)

  2. Cómo excluir directorios específicos de la copia en Linux

  3. Cómo archivar archivos y directorios en Linux [Parte 2]

  4. Copie archivos con SCP y Rsync

  5. ¿Cómo puedo excluir archivos de forma predeterminada con rsync?

Cómo mover archivos y directorios en Linux (comando mv)

Cómo transferir archivos con Rsync a través de SSH

Cómo usar el comando cp para copiar archivos y directorios

Cómo sincronizar archivos y directorios usando Zaloha.sh

Cómo hacer una copia de seguridad de archivos y directorios usando Rsync en Linux

Mantener los archivos y directorios de Linux sincronizados con rsync