linux - servidor - rsync-- backup
No se puede obtener la opción de exclusión de rsync para excluir el directorio (3)
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 desde, el patrón exclude se especifica comenzando con a/
Muéstranos los caminos reales / excluye si esto no ayuda.
Al ejecutar rsync con -vn aparecerá una lista de directorios / archivos, el patrón se compara con el formato que rsync imprime.
Tener problemas con rsync. Estoy usando rsync como un comando glp cp. Tengo en una secuencia de comandos el siguiente código.
rsync -aL --exclude /path/to/exclude/ --exclude=''.*'' /source/ /destination
Puedo obtener el rsync para excluir cualquier archivo oculto. De ahí el ''.*''
No puedo obtener el directorio exclude para excluir. He intentado usar un signo ''=''
, que rodea el directorio con comillas dobles, con comillas simples. Cualquier ayuda sería muy apreciada. Gracias por adelantado.
Siguiendo el ejemplo de Erik, quieres hacer esto:
rsync -nvraL test/a/ test/dest --exclude=/b/c/d
En realidad, ninguno de estos son completamente precisos.
Erik tiene razón al decir que
Como test / a es el directorio base sincronizado desde, el patrón exclude 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
une a test/a/some/path
), pero esa no es toda la historia.
Desde la página man:
si el patrón comienza con a / entonces está anclado a un punto particular en la jerarquía de archivos, de lo contrario se compara con el final del nombre de ruta. Esto es similar a un ^ en las 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 de combinación (para una regla 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 otro lado, excluirá solo test/a/b/c/d
(y niños) ( test/a
siendo el punto al cual /
está anclado).
Es por esto que aún necesita la barra inicial de anclaje si desea excluir esa ruta específica de la copia de seguridad. Esto podría parecer un detalle menor, y así será más específico será el patrón de exclusión (por ejemplo, Pictures
vs. home/daniel/Pictures
), pero podría venir a morderte el trasero.