Comment spécifier un nom de «niveau supérieur» différent pour tar?

10

Je voudrais tarer root (/) et le laisser apparaître comme / abc dans l'archive tar.

Existe-t-il un indicateur tar pour spécifier un nom de niveau supérieur personnalisé?

Howard
la source

Réponses:

6

Le plus proche que je peux trouver est l' --transformoption. Je ne sais pas avec certitude, mais je suppose que c'est un drapeau GNU uniquement:

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

En utilisant cela, vous pouvez passer une sedcommande de substitution et changer la /en /abc:

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

Cela imprimera toujours les /chemins lors de la création de l'archive mais ils le deviendront /abclorsque vous l'extrayez.


Une autre approche, si votre tarn'a pas la --transformpossibilité est de créer /abcun lien symbolique pointant vers /puis tar qui:

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

Le -hest essentiel car c'est ce qui dit tarde suivre les liens:

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

Cela aura pour effet de définir /abccomme répertoire de niveau supérieur.

terdon
la source
2

Avec GNU tar, vous pouvez utiliser cette commande:

tar --transform="s|/|/abc/|" -Pcf bar.tar /

Sinon, voici une façon portable de le faire, c'est-à-dire qui ne dépend pas d'une GNU ou d'une autre extension tar spécifique mais qui est basée sur un outil POSIX qui devrait être disponible sur n'importe quelle machine compatible Unix:

pax -w -s '/\//\/abc\//' -f foo.tar /
jlliagre
la source
1

Voici comment je l'ai fait, qui fonctionne pour le goudrage à partir de n'importe quel endroit (pas seulement /):

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

Il ajoute simplement un /abc/au début de chaque chemin.

Zane Hooper
la source
1
Lors de l'extraction d'une archive créée de cette façon, j'obtiens un avertissement tar: Removing leading / from member names. L'utilisation 's|^|abc/|'a bien fonctionné pour moi.
Michael Platings du