Respostas:
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.
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.