2011-03-17 11 views
9

que tienen un problema con rsync excluyen. Estoy usando rsync como un comando glp cp. Tengo en una secuencia de comandos el siguiente código.no puede conseguir a rsync opción para excluir dir

rsync -aL --exclude /path/to/exclude/ --exclude='.*' /source/ /destination

puedo conseguir el rsync para excluir los archivos ocultos. Por lo tanto, el '.*' no puedo obtener el directorio exclude para excluir. He intentado usar un signo '=', que rodea la dir con comillas dobles, con comillas simples. Cualquier ayuda sería muy apreciada. Gracias por adelantado.

+0

Para mayor claridad, he tratado '--exclude =/ruta/a/excluir /' ' --exclude/ruta/a/excluir /' ' --exclude '/ ruta/a/excluir/' ' ' --exclude "/ ruta/a/excluir /" ' ' --exclude = "/ ruta/a/excluir /" ' ' --exclude = '/ path/to/exclude /' ' –

+0

Pruebe' --exclude '/ path/to/exclude'' sin el final /, rsync tiene algún comportamiento con él i n algún caso. Otherwize, también puedes probar '--exclude '/ path/to/exclude/*'' – Aif

+0

Gracias Aif, ya lo intenté sin el final /. Olvidé agregarlo a mi lista. Es extraño, debo estar perdiendo algo. –

Respuesta

10
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 sincronizado, el patrón de exclusión se especifica al comenzar con a/

Muéstrenos las rutas reales/excluye si esto no ayuda.

Correr rsync con -vn mostrará una lista de archivos/dirs - el patrón se compara con el formato que rsync impresiones.

+0

Gracias Erik por su respuesta. Estabas en el dinero. Es extraño que la opción de exclusión no tome caminos absolutos. –

+0

@James P. Los filtros rsync no son realmente intuitivos ... Pero bueno, funcionan, solo tiene que leer "REGLAS DE FILTRADO" en la página de manual muchas veces :) – Erik

2

Siguiendo el ejemplo de Erik que desee hacer esto:

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

En realidad, ninguno de estos son totalmente exactos.

Erik está a medio camino correcto al decir que

Como prueba/a es el directorio base sincronizado desde, se especifica el patrón de excluir comenzando con un/

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

Desde la página del manual:

si el patrón comienza con un/a continuación, que está anclado a un punto particular en la jerarquía de archivos, de lo contrario se compara con el final de la ruta. Esto es similar a un^en las expresiones regulares. Por lo tanto "/ foo" se correspondería con un archivo llamado "foo", ya sea en la "raíz de la transferencia" (para una regla global) o en el directorio de la fusión-archivo (por regla general por directorio).

Podemos ignorar el bit per-directory 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 (y niños), pero también excluirá test/a/other/place/a/b/c/d.

rsync -nvraL test/a test/dest --exclude=/b/c/d, por otra parte, excluirá sólotest/a/b/c/d (y niños) (test/a ser el punto al que está anclado /).

Esta es la razón por la que aún necesita la barra inicial de anclaje si desea excluir de la ruta específica de la copia de seguridad. Esto podría parecer un detalle menor, y así será más específico será su patrón de exclusión (por ejemplo, Pictures frente a home/daniel/Pictures), pero podría venir a morderle el trasero.

Cuestiones relacionadas