Risposte:
Il più vicino che riesco a trovare è l' --transform
opzione. Non lo so per certo, ma suppongo che questa sia una bandiera solo GNU:
--transform, --xform EXPRESSION
use sed replace EXPRESSION to transform file names
Usando quello, puoi passare un sed
comando di sostituzione e cambiare /
in /abc
:
tar cf root.tgz --transform 's/^\//\/abc/' /
Questo continuerà a stampare i /
percorsi durante la creazione dell'archivio, ma diventeranno /abc
quando lo estrai.
Un altro approccio, se il tuo tar
non ha l' --transform
opzione è di creare /abc
un link simbolico che punta a /
e quindi tar che:
$ ln -s / /abc
$ tar chf root.tgz /abc
Il -h
è essenziale come questo è ciò che dice tar
di seguire i link:
-h, --dereference
follow symlinks; archive and dump the files they point to
Ciò avrà l'effetto di impostare /abc
come directory di livello superiore.
Con GNU tar, puoi usare quel comando:
tar --transform="s|/|/abc/|" -Pcf bar.tar /
Altrimenti, ecco un modo portatile per farlo, cioè uno che non si basa su una GNU o un'altra estensione tar specifica ma si basa su uno strumento POSIX che dovrebbe essere disponibile su qualsiasi macchina compatibile con Unix:
pax -w -s '/\//\/abc\//' -f foo.tar /
Ecco come l'ho fatto che funziona per il tarring da qualsiasi posizione (non solo /):
tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *
Aggiunge semplicemente /abc/
all'inizio di ogni percorso.
tar: Removing leading / from member names
. L'uso ha's|^|abc/|'
funzionato bene per me.