rsync copiando o conteúdo do diretório de forma não recursiva

8

Estou tentando copiar o conteúdo de uma série de diretórios de maneira não recursiva para outro sistema remoto.

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2 e dir3 contêm muitos diretórios que não querem copiados. Copie no host remoto para / dirB mantendo a mesma estrutura de diretório.

Eu tentei:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

Mas eles não fazem o que eu quero.

    
por Felipe Alvarez 13.06.2012 / 03:53

3 respostas

17

O rsync permite especificar padrões que acionam a inclusão ou exclusão de arquivos e diretórios. Eu acho que você quer usar algo assim:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

Explicação:

  • -a aciona o modo de arquivo que ativa a recursão e a preservação de "links, dispositivos, atributos, permissões, propriedades, etc. simbólicos", de acordo com man rsync .
  • -f é a abreviação de --filter= , que adiciona uma regra de filtragem de arquivos.
    • O padrão está dentro de aspas simples, de forma que o shell não expanda curingas; aspas duplas funcionariam igualmente bem neste caso.
    • - significa que este é um padrão de exclusão.
    • O principal / significa que o padrão deve começar em dirA/ (o rsync "transferência-raiz").
    • A parte */* do padrão refere-se a qualquer item dentro de um subdiretório.
    • O / à direita limita a exclusão aos diretórios. Os arquivos dentro de um subdiretório de dirA/ não são afetados.

Assim, no final, o rsync copia nada mais do que um nível abaixo (e também não cria diretórios de segundo nível).

    
por 13.06.2012 / 04:59
3

A solução acima (por PleaseStand) não funcionou para mim por algum motivo. Isso funcionou:

rsync -avc --no-r ./source/* ./destination/

Existe também uma alternativa:

rsync -avc --exclude "/" ./source/ ./destination/

    
por 14.11.2015 / 02:22
0

Um dos "recursos" do rsync é como os diretórios são analisados.

rsync /dirA/ host:/dirB/ e %código% teoricamente deveria ser equivalente.

Como não quer incentivar a recursividade, você quer evitar rsync /dirA host:/dirB , -r , o que, além de outras coisas, implica em -a .

Ainda não terminei a pesquisa, mas esta é a minha resposta inicial.

    
por 13.06.2012 / 04:33

Tags