usuario usar remoto remotas opciones incremental contraseƱa con como comando carpetas shell include rsync

shell - usar - rsync excluye un directorio pero incluye un subdirectorio



rsync opciones (3)

El orden de --include y --include afecta lo que se está incluyendo o excluyendo.
Cuando hay subdirectorios particulares que deben incluirse, primero hay que colocarlos.
Publicación similar disponible here .

Estoy intentando copiar un proyecto a mi servidor con rsync. Tengo scripts de instalación específicos del proyecto en un subdirectorio

proyecto / especificaciones / instalar / proyecto1

Lo que estoy tratando de hacer es excluir todo en el directorio proyecto / especificaciones , pero el directorio de instalación específico del proyecto: proyecto / especificaciones / instalación / proyecto1 .

rsync -avz --delete --include=specs/install/project1 / --exclude=specs/* /srv/http/projects/project/ / [email protected]:~/projects/project

Pero así, el contenido del directorio de especificaciones se excluye, pero el directorio install / project1 no se incluye.

Lo he intentado todo, pero parece que no consigo que esto funcione


En algún momento es solo un detalle.

Simplemente cambie su patrón de inclusión agregando un final / al final del patrón de inclusión y funcionará:

rsync -avz --delete --include=specs/install/project1/ / --exclude=specs/* /srv/http/projects/project/ / [email protected]:~/projects/project

O, como alternativa, prepare un archivo de filtro como este:

$ cat << EOF >pattern.txt > + specs/install/project1/ > - specs/* > EOF

Luego usa la opción --filter:

rsync -avz --delete --filter=". pattern.txt" / /srv/http/projects/project/ / [email protected]:~/projects/project

Para obtener más información, vaya a la sección REGLAS DE FILTROS en la página de manual de rsync (1).


La otra solución no funciona aquí.

Forma confiable

No tiene más remedio que descender manualmente para cada nivel de su subdirectorio. No hay riesgo de incluir archivos no deseados, ya que rsync no incluye los archivos de los directorios incluidos.

1) Cree un archivo de filtro de inclusión, por ejemplo "include_filter.txt":

+ /specs/ + /specs/install/ + /specs/install/project1/*** - /specs/**

2) Ejecutarlo:

rsync -avz --delete --include-from=include_filter.txt / /srv/http/projects/project/ / [email protected]:~/projects/project

  • No olvide la barra inicial "/", de lo contrario, puede hacer coincidir los subdirectorios llamados "** / specs / install / project1 /".
  • Al elegir un filtro de tipo de inclusión (--include-from = FILE), los signos de inicio + "+" son en realidad opcionales, ya que esta es la acción predeterminada sin signo. (Puede tener el opuesto "-" de forma predeterminada con --exclude-from = FILE.)
  • Las estrellas dobles "**" significa "cualquier camino"
  • Las estrellas triples "***" significa "cualquier ruta, incluido este mismo directorio"

Forma fácil

Puede iniciar sus filtros "* /", permitiendo que rsync descienda todos sus subniveles. Esto es conveniente pero:

  • Se incluirán todos los directorios, aunque estén vacíos. Esto puede solucionarse con la opción rysnc -m, pero luego se omitirán todas las direcciones vacías.

1) Cree un archivo de filtro de inclusión, por ejemplo "include_filter.txt":

+ /**/ + /specs/install/project1/*** - /specs/**

2) Ejecutarlo:

rsync -avzm --delete --include-from=include_filter.txt / /srv/http/projects/project/ / [email protected]:~/projects/project

Tenga en cuenta la opción añadida -m.