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é?
Le plus proche que je peux trouver est l' --transform
option. 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 sed
commande 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 /abc
lorsque vous l'extrayez.
Une autre approche, si votre tar
n'a pas la --transform
possibilité est de créer /abc
un lien symbolique pointant vers /
puis tar qui:
$ ln -s / /abc
$ tar chf root.tgz /abc
Le -h
est essentiel car c'est ce qui dit tar
de suivre les liens:
-h, --dereference
follow symlinks; archive and dump the files they point to
Cela aura pour effet de définir /abc
comme répertoire de niveau supérieur.
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 /
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.
tar: Removing leading / from member names
. L'utilisation's|^|abc/|'
a bien fonctionné pour moi.