Las rsync
reglas de filtro global que comienzan con un líder /
están ancladas a la raíz de la transferencia. Citando de la sección "INCLUIR / EXCLUIR REGLAS DE PATRÓN" de la página del manual:
Si el patrón comienza con un / 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 ^ inicial en expresiones regulares. Por lo tanto, "/ foo" coincidiría con el nombre de "foo" en la "raíz de la transferencia" (para una regla global) o en el directorio del archivo de fusión (para una regla por directorio).
En su comando ( rsync ... -arv /home/ben home-ben/
), el archivo /home/ben/foo
se transferirá a home-ben/ben/foo
. La raíz de la transferencia es home-ben
y la ruta de filtro correcta es /ben/foo
. Así,
- para que coincida
/home/ben/.ccache
necesita una ruta de filtro de/ben/.ccache
- para que coincida
/home/ben/build/
necesita una ruta de filtro de/ben/build/
Se puede encontrar una explicación más detallada en la sección "ANCLAJE INCLUYE / EXCLUYA PATRONES" de la rsync(1)
página del manual .
Tenga en cuenta que simplemente omitir el líder /
no es necesariamente lo que desea. Citando nuevamente desde la misma sección de la página man:
Un "foo" no calificado coincidiría con un nombre de "foo" en cualquier parte del árbol porque el algoritmo se aplica de forma recursiva de arriba hacia abajo; se comporta como si cada componente de ruta tuviera un giro al ser el final del nombre de archivo. Incluso el "sub / foo" no anclado coincidiría en cualquier punto de la jerarquía donde se encontrara un "foo" dentro de un directorio llamado "sub". Vea la sección sobre ANCLAJE INCLUYE / EXCLUYA PATRONES para una discusión completa de cómo especificar un patrón que coincida en la raíz de la transferencia.
Por lo tanto, un patrón de filtro de build/
coincidiría con un directorio de compilación en cualquier lugar /home/ben
, incluso /home/ben/many/sub/directories/build/
.