GNU/Linux >> Tutoriales Linux >  >> Linux

No se puede obtener la opción de exclusión de rsync para excluir el directorio

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

Esto funciona. Como test/a es el directorio base desde el que se sincroniza, el patrón de exclusión se especifica comenzando con a/

Muéstranos las rutas/exclusiones reales si esto no ayuda.

Ejecutar rsync con -vn mostrará una lista de directorios/archivos:el patrón se compara con el formato que imprime rsync.


Cualquiera de estos funcionaría:

rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Tenga en cuenta el final / en la ruta de origen hace una diferencia crítica en cómo --exclude debe especificarse. Esto supone que tenemos:

mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest

La publicación original tiene dificultades cuando la ruta de exclusión comienza con un / . La respuesta de Daniel es correcta que este / inicial en la ruta de exclusión podría ser deseable excluir una ruta específica, y que este / inicial debe entenderse como líder ^ en expresiones regulares. Sin embargo, su respuesta tiene un error tipográfico crítico sobre el final / en la ruta de origen.


Siguiendo el ejemplo de Erik, quieres hacer esto:

rsync -nvraL test/a/ test/dest --exclude=/b/c/d

En realidad, ni la respuesta de Erik ni la de Antoni son del todo precisas.

Erik tiene la mitad de razón al decir eso

Como test/a es el directorio base desde el que se sincroniza, el patrón de exclusión se especifica comenzando con a/

Es cierto que la raíz del patrón de exclusión es test/a (es decir, el patrón /some/path se une a test/a/some/path ), pero esa no es toda la historia.

Desde la página del manual:

si el patrón comienza con / entonces está anclado a un lugar particular en la jerarquía de archivos, de lo contrario, se compara con el final del nombre de la ruta. Esto es similar a un ^ inicial en expresiones regulares. Por lo tanto, "/foo" coincidiría con un archivo llamado "foo" en la "raíz de la transferencia" (para una regla global) o en el directorio del archivo combinado (para una regla por directorio).

Podemos ignorar el per-directory bit ya que no se aplica a nosotros aquí.

Por lo tanto, rsync -nvraL test/a test/dest --exclude=a/b/c/d definitivamente excluirá test/a/b/c/d (e hijos), pero también excluirá test/a/other/place/a/b/c/d .

rsync -nvraL test/a test/dest --exclude=/b/c/d , por otro lado, excluirá solo test/a/b/c/d (e hijos) (test/a siendo el punto al que / está anclado).

Es por eso que aún necesita la barra inclinada inicial de anclaje si desea excluir esa ruta específica de ser respaldado. Esto puede parecer un detalle menor, y lo será cuanto más específico sea su patrón de exclusión (por ejemplo, Pictures contra home/daniel/Pictures ), pero puede que te muerda el trasero.


Linux
  1. ¿Excluir todos los archivos de subrayado de puntos de Rsync?

  2. ¿La carpeta de exclusión de Rsync no funciona?

  3. 6 ejemplos de rsync para excluir varios archivos y directorios utilizando excluir de

  4. Comience con Latex en Linux

  5. ¿Cómo usar el comando 'cp' para excluir un directorio específico?

Cómo usar rsync para excluir archivos y directorios en la transferencia de datos

Cómo excluir archivos y directorios con Rsync

No se puede iniciar php-fpm:no se puede obtener uid para el usuario 'apache'

rsync y enlaces simbólicos

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

Problemas con el comando Rsync, los permisos de propietario y grupo no cambian