¿Cómo especificar un nombre de "nivel superior" diferente para el alquitrán?

10

Me gustaría tar raíz (/) y dejar que aparezca como / abc en el archivo tar.

¿Hay un indicador de tar para especificar un nombre de nivel superior personalizado?

Howard
fuente

Respuestas:

6

Lo más cerca que puedo encontrar es la --transformopció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 sedcomando 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 /abccuando lo extraigas.


Otro enfoque, si tarno tiene la --transformopción, es hacer /abcun enlace simbólico que apunte /y luego tar que:

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

Lo -hesencial es que eso es lo que dice tarseguir enlaces:

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

Eso tendrá el efecto de establecerse /abccomo el directorio de nivel superior.

terdon
fuente
2

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 /
jlliagre
fuente
1

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.

Zane Hooper
fuente
1
Cuando extraigo un archivo creado de esta manera, recibo una advertencia tar: Removing leading / from member names. El uso 's|^|abc/|'funcionó bien para mí.
Michael Platings