Respostas:
O mais próximo que posso encontrar é a --transform
opçã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 sed
comando 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 /abc
quando você o extrair.
Outra abordagem, se o seu tar
não tiver a --transform
opção, é criar /abc
um link simbólico apontando para /
e tar:
$ ln -s / /abc
$ tar chf root.tgz /abc
O -h
essencial é o que diz tar
para 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.
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 /
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.
tar: Removing leading / from member names
. Usar's|^|abc/|'
funcionou bem para mim.