As rsync
regras globais de filtro que começam com um líder /
estão ancoradas na raiz da transferência. Citando a seção "INCLUIR / EXCLUIR REGRAS DE PADRÃO" da página do manual:
se o padrão começar com um /, ele será ancorado em um ponto específico na hierarquia de arquivos; caso contrário, será comparado com o final do nome do caminho. Isso é semelhante a um ^ inicial em expressões regulares. Assim, "/ foo" corresponderia ao nome "foo" na "raiz da transferência" (para uma regra global) ou no diretório do arquivo de mesclagem (para uma regra por diretório).
No seu comando ( rsync ... -arv /home/ben home-ben/
), o arquivo /home/ben/foo
seria transferido para home-ben/ben/foo
. A raiz da transferência é home-ben
e o caminho correto do filtro é /ben/foo
. Portanto,
- para corresponder,
/home/ben/.ccache
você precisa de um caminho de filtro de/ben/.ccache
- para corresponder,
/home/ben/build/
você precisa de um caminho de filtro de/ben/build/
Uma explicação mais detalhada pode ser encontrada na seção "ANCHORING INCLUDE / EXCLUDE PATTERNS" da rsync(1)
página de manual .
Observe que simplesmente deixar de fora a liderança /
não é necessariamente o que você deseja. Citando novamente a mesma seção da página de manual:
Um "foo" não qualificado corresponderia a um nome de "foo" em qualquer lugar da árvore porque o algoritmo é aplicado recursivamente de cima para baixo; ele se comporta como se cada componente do caminho chegasse ao final do nome do arquivo. Até o "sub / foo" não ancorado corresponderia em qualquer ponto da hierarquia em que um "foo" fosse encontrado dentro de um diretório chamado "sub". Consulte a seção ANCHORING INCLUDE / EXCLUDE PATTERNS para obter uma discussão completa de como especificar um padrão que corresponda à raiz da transferência.
Assim, um padrão de filtro build/
corresponderia a um diretório de compilação em qualquer lugar /home/ben
, inclusive /home/ben/many/sub/directories/build/
.