Como especificar um nome de “nível superior” diferente para o tar?

8

Eu gostaria de colocar o root (/) e deixá-lo aparecer como / abc no arquivo tar.

Existe um sinalizador de tar para especificar um nome de nível superior personalizado?

    
por howard 30.11.2014 / 16:46

3 respostas

5

O mais próximo que eu posso encontrar é a opção --transform . Eu não sei ao certo, mas estou supondo que este é apenas um sinalizador do GNU:

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

Usando isso, você pode passar um comando sed de substituição e alterar o / para /abc :

tar cf root.tgz --transform 's/^\//\/abc/' /

Isso ainda imprimirá / caminhos ao criar o arquivo, mas eles se tornarão /abc quando você o extrair.

Outra abordagem, se a sua tar não tiver a opção --transform , é tornar /abc um link simbólico apontando para / e, em seguida, tar que:

$ ln -s / /abc
$ tar chf root.tgz /abc

O -h é essencial, pois é isso que informa o tar a seguir os links:

 -h, --dereference
       follow symlinks; archive and dump the files they point to

Isso terá o efeito de definir /abc como o diretório de nível superior.

    
por 30.11.2014 / 17:27
2

Com o GNU tar, você pode usar esse comando:

tar --transform="s|/|/abc/|" -Pcf bar.tar /

Caso contrário, aqui está uma maneira portátil de fazer isso, ou seja, uma que não dependa de um GNU ou outra extensão tar específica, mas é baseada em uma ferramenta POSIX que deve estar disponível em qualquer máquina compatível com Unix:

pax -w -s '/\//\/abc\//' -f foo.tar /
    
por 30.11.2014 / 17:30
1

Aqui está como eu fiz isso, que funciona para tarring de qualquer local (não apenas /):

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

Basta anexar um /abc/ ao início de cada caminho.

    
por 18.09.2017 / 03:35

Tags