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


10

Gostaria de tar tar (/) e deixá-lo aparecer como / abc no arquivo tar.

Existe um sinalizador de alcatrão para especificar um nome personalizado de nível superior?

Respostas:


6

O mais próximo que posso encontrar é a --transformopção. Não sei ao certo, mas acho que essa é uma bandeira apenas do GNU:

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

Com isso, você pode passar um sedcomando de substituição e alterar /para /abc:

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

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


Outra abordagem, se o seu tarnão tiver a --transformopção, é criar /abcum link simbólico apontando para /e tar:

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

O -hessencial é o que diz tarpara seguir os links:

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

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


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, que não depende de um GNU ou outra extensão tar específica, mas baseia-se em uma ferramenta POSIX que deve estar disponível em qualquer máquina compatível com Unix:

pax -w -s '/\//\/abc\//' -f foo.tar /

1

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

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

Simplesmente anexa /abc/a ao início de cada caminho.


1
Ao extrair um arquivo criado dessa maneira, recebo um aviso tar: Removing leading / from member names. Usar 's|^|abc/|'funcionou bem para mim.
Michael Platings
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.