decomprimere 'tar' ma cambiare il nome della directory in cui estrarre


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Vorrei estrarre il file e il nome in, cartella2 . Questo può essere fatto come one-liner?

Risposte:


35

Usa -Ce --strip-components(Vedi man tar).

Esempio:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Spiegazione:

Il -Cflag presuppone che sia già presente una directory in modo che il contenuto del file tar possa essere espanso in essa. da qui il mkdir FOLDER.

Il --strip-componentsflag viene utilizzato quando un file tar si espande naturalmente in una cartella, diciamo, come github, dove è un esempio di repo-name-mastercartella. Ovviamente non avresti bisogno della cartella di primo livello generata qui, quindi --strip-componentsimpostare su 1rimuoverà automaticamente quella prima cartella per te. Maggiore è il numero impostato, le cartelle nidificate più profonde vengono rimosse.


Ho letto man tar. Non ho trovato --strip-components. bello
Felipe Alvarez,

1
tar-1.14 usa --strip-path, tar-1.14.90 + usa --strip-componenti. Forse problema qui?
Mikhail Moskalev,

Voterei questo se fornisse un esempio e non solo gli switch, come afferma il manuale in linea , 3 stili di argomenti generano confusione.
Iain,

Ho dimenticato il -f su tar -xz, penso io. Fallito per me Pensavo di averlo usato senza motivo per tutto questo tempo ...
John Carrell il

17

Puoi anche usare l' --transformopzione per un po 'più di flessibilità. Accetta qualsiasi operazione di sostituzione di sed.

Ad esempio, ecco come estraggo un tarball di Linux in una nuova directory in modo da poter applicare una patch:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
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.