Risposte:
Il più vicino che riesco a trovare è l' --transformopzione. 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 sedcomando 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 /abcquando lo estrai.
Un altro approccio, se il tuo tarnon ha l' --transformopzione è di creare /abcun 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 tardi seguire i link:
-h, --dereference
follow symlinks; archive and dump the files they point to
Ciò avrà l'effetto di impostare /abccome 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.