Usando o rsync para copiar recursivamente um diretório enquanto exclui um subdiretório, mas incluindo um arquivo em um subdiretório do subdiretório excluído

0

Eu tenho uma árvore de arquivos assim:

in
├── file1
├── dir1
└── dir2
    ├── dir3
    │   ├──── file2
    │   └──── junk1
    ├── junk2
    └── junk3

Eu quero criar um irmão de in que se pareça com o seguinte:

out
├── file1
├── dir1
└── dir2
    └─── dir3
         └── file2

Em outras palavras, copie recursivamente in para out , excluindo in/dir2 , mas incluindo in/dir2/dir3/file2 .

Eu tentei o seguinte:

rsync -a --exclude='in/dir2' --include='in/dir2/dir3/file2' in out

O que resulta no seguinte:

out
└── in
    └── file1

Então eu tentei o seguinte:

rsync -a --exclude='dir2' --include='dir2/dir3/file2' in/ out

O que resulta em:

out
└── file1

Como posso alcançar o que quero com rsync ou outras ferramentas unix? Eu preferiria ficar longe de usar métodos estranhos como canalizar tar em tar ...

    
por knpwrs 12.02.2013 / 22:05

2 respostas

0

Que tal dividir isso em mais de um comando rsync e agrupá-los em um script de shell.

Outra alternativa possível é uma combinação de encontrar com cpio para o dispositivo de destino.

    
por 12.02.2013 / 22:35
1

Você pode explorar as opções --exclude-from=FILE e --include-from=FILE com o rsync.

--include-from=FILE
        This  option is related to the --include option, but it specifies a FILE that contains include patterns
        (one per line).  Blank lines in the file and lines starting with ’;’ or ’#’ are ignored.  If FILE is -,
        the list will be read from standard input.
    
por 13.02.2013 / 00:17

Tags