Metti i file tar in una sottodirectory


8

Ho una configurazione di directory come la seguente:

folder_x
file.y
file.z

Vorrei creare un file tar in modo che quando viene estratto la struttura sarà simile a questa:

dir_q/folder_x
dir_q/file.y
dir_q/file.z

Come potrei farlo funzionare usando tar? Per riferimento, il comando corrente che sto usando è:

tar -czf archive.tar.gz file.y file.z folder_x

Risposte:


9

Non ho mai usato l'opzione --transform, ma ho capito che farebbe quello che ti serve:

tar -czf archive.tar.gz --transform 's,^,dir_q/,' file.y file.z folder_x

Prendi in considerazione l'uso di ,invece di /come separatore, in modo da poter aggiungere una barra finale.


Hmm, non sembra farlo correttamente: file.z-> dirfile.ze dirfolder_x. Giocherò anche con la regex per vedere se riesco a farlo nel modo in cui lo voglio.

1
Ecco come lo faccio: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z cartella_x Sed consente, invece di /, di evitare ambiguità quando ci sono barre in avanti nella tua espressione . Normalmente direi che puoi sfuggire alla barra con una barra rovesciata, ma sed (almeno, gnu sed) non la interpreta correttamente.
jdb,

tar --transform non sembra funzionare su MacOS
Alexander Mills,

In MacOS è possibile installare macports e gnutar per ottenere l'opzione --transform. O scarica e compila gnutar da solo.
Marnix A. van Ammers,

1

Se non ti dispiace creare la nuova directory ...

mkdir dir_q; tar -C $ _ -xzvf archive.tar.gz

in alternativa, crea una nuova directory, decomprimere il file in quella directory, quindi ripetere il tar dalla directory principale per includerne il nome nella versione estratta. In questo modo non devi ricordare invocazioni super lunghe.

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.