Respuestas:
Lo más cerca que puedo encontrar es la --transform
opción. No estoy seguro, pero supongo que esta es una bandera de GNU solamente:
--transform, --xform EXPRESSION
use sed replace EXPRESSION to transform file names
Con eso, puede pasar un sed
comando de sustitución y cambiar el /
a /abc
:
tar cf root.tgz --transform 's/^\//\/abc/' /
Esto seguirá imprimiendo /
rutas al crear el archivo, pero se convertirán /abc
cuando lo extraigas.
Otro enfoque, si tar
no tiene la --transform
opción, es hacer /abc
un enlace simbólico que apunte /
y luego tar que:
$ ln -s / /abc
$ tar chf root.tgz /abc
Lo -h
esencial es que eso es lo que dice tar
seguir enlaces:
-h, --dereference
follow symlinks; archive and dump the files they point to
Eso tendrá el efecto de establecerse /abc
como el directorio de nivel superior.
Con GNU tar, puedes usar ese comando:
tar --transform="s|/|/abc/|" -Pcf bar.tar /
De lo contrario, aquí hay una forma portátil de hacerlo, es decir, una que no se basa en una GNU u otra extensión tar específica, sino que se basa en una herramienta POSIX que debería estar disponible en cualquier máquina compatible con Unix:
pax -w -s '/\//\/abc\//' -f foo.tar /
Así es como lo hice, que funciona para trabajar desde cualquier ubicación (no solo /):
tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *
Simplemente agrega un /abc/
al principio de cada camino.
tar: Removing leading / from member names
. El uso's|^|abc/|'
funcionó bien para mí.