Comportamento rsync diferente para nome de diretório idêntico

4

Eu quero sincronizar duas bases de código. O comando abaixo está funcionando muito bem, exceto pelo fato de que não conta para um caso de uso que eu tenho com dois diretórios chamados test em locais diferentes:

  • / test /
  • / start / test /

$ rsync -avCz --delete-before --progress --exclude=test /tmp/codebase/ .

O que eu quero fazer é excluir completamente o diretório / test do rsync, mas eu quero que / start / test seja rsync'ed.

Eu prefiro não ter que criar um arquivo TXT estático que eu passe como um argumento para o rsync. Existe alguma maneira de conseguir isso de outra forma? Jogando com - inclua VS - exclude e uma barra à direita ( - exclude = test / ) não funcionou como esperado para mim .

    
por anavarre 17.04.2014 / 14:12

1 resposta

2

Você pode usar um / inicial para corresponder apenas à raiz da transferência. Tente isto:

rsync -avCz --delete-before --progress --exclude=/test/ /tmp/codebase/ .

Aqui está o snippet da página de manual para o líder / :

if the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files, otherwise it is matched against the end of the pathname. This is similar to a leading ^ in regular expressions. Thus "/foo" would match a name of "foo" at either the "root of the transfer" (for a global rule) or in the merge-file’s directory (for a per-directory rule). An unqualified "foo" would match a name of "foo" anywhere in the tree because the algorithm is applied recursively from the top down; it behaves as if each path component gets a turn at being the end of the filename. Even the unanchored "sub/foo" would match at any point in the hierarchy where a "foo" was found within a directory named "sub".

E para o trailing / :

if the pattern ends with a / then it will only match a directory, not a regular file, symlink, or device.

Atualizar

Acredito em seus comentários que você também está procurando a opção --delete-excluded .

    
por 17.04.2014 / 15:19

Tags