Las rsyncreglas 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/foose transferirá a home-ben/ben/foo. La raíz de la transferencia es home-beny la ruta de filtro correcta es /ben/foo. Así,
- para que coincida
/home/ben/.ccachenecesita 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/.