rsync todos os diretórios que começam com um dígito específico

6

Eu tenho um diretório carregado com milhares de subdiretórios:

/home/tmp/
          1
          12
          123
          1234
          2345
          234
          3456
          345
          34

Cada subdiretório, por sua vez, tem centenas de subdiretórios que eu quero rsync se o primeiro subdiretório de nível corresponder ...

O que eu preciso é uma maneira de copiar / rsync apenas os diretórios que começam com um dado dígito [1-9] ...

O que eu acho que quero é basicamente algo que me permita usar curingas para combinar

rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/

Eu quero que o rsync sincronize o

/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/

diretórios e subdiretórios filhos eles têm, mas nenhum dos diretórios de primeiro nível que iniciam com um dígito diferente ...

/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..

O que eu tentei:

rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/

em que 1.txt contém:

1
12
123
1234

Quando faço isso com o 2.txt, embora o rsync ainda pareça percorrer todos os diretórios que começam com 1 e 3, etc ...

Como posso fazer isso para que eu possa ter um comando para rsync apenas os diretórios que começam com qualquer dígito determinado?

    
por kasdega 01.02.2013 / 22:35

1 resposta

19

O que você propôs deveria realmente funcionar:

rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/

(Você pode se safar de não citar o * na maioria das circunstâncias, já que é improvável que o padrão remotehost:/home/tmp/1\* corresponda a qualquer arquivo, de modo que ele fique sozinho com a maioria das configurações de shell.)

Sua tentativa com --exclude='*' falhou porque a primeira correspondência se aplica e sua primeira correspondência para tudo ( * ) diz para excluir.

Veja este guia para alguns princípios gerais sobre filtros rsync. Aqui, para incluir apenas os diretórios que começam com 1 no nível superior e copie tudo nos subdiretórios incluídos, inclua /1 e exclua /* .

rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/
    
por 02.02.2013 / 01:09