Come specificare un nome "top level" diverso per tar?


10

Vorrei tar root (/) e farlo apparire come / abc nell'archivio tar.

Esiste un flag tar per specificare un nome di livello superiore personalizzato?

Risposte:


6

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.


2

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 /

1

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.


1
Quando estraggo un archivio creato in questo modo ricevo un avviso tar: Removing leading / from member names. L'uso ha 's|^|abc/|'funzionato bene per me.
Michael Platings,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.