Criando um arquivo tar sem incluir o diretório pai quando os arquivos são armazenados em diretórios diferentes

10

Eu tenho os quatro arquivos a seguir no sistema de arquivos:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Eu preciso colocar esses arquivos em um arquivo tar, mas não quero adicionar diretórios. O melhor que consegui foi:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Isso ainda não é perfeito, porque cada arquivo no arquivo tem dois diretórios. Existe uma maneira melhor? Ou eu simplesmente tenho que copiar os arquivos s1 , s2 , r3 e r5 em um diretório e criar o arquivo com tar -czvf archive.tgz s1 s2 r3 r5 ?

    
por Martin 06.01.2017 / 08:44

3 respostas

17

Você pode usar -C várias vezes (passando de um diretório para outro):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Note que cada opção -C é interpretada em relação ao diretório atual naquele ponto (ou você pode apenas usar caminhos absolutos).

    
por 06.01.2017 / 08:54
10

Se você tem a lista de arquivos em um arquivo, ou pode gerá-los usando um comando, você pode usar um único comando GNU tar:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

A transformação ainda mantém diretórios, mas achata o layout completamente. Então você precisa de alguma maneira de filtrar diretórios, daí a necessidade de uma lista de arquivos.

    
por 06.01.2017 / 09:03
8

Você pode acrescentar arquivos ao arquivo, um por um:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Você pode criar scripts para facilitar: para cada caminho, execute tar rf com o diretório base como o valor do parâmetro -C e o nome do arquivo base sem o caminho a ser adicionado.

    
por 06.01.2017 / 08:50

Tags