Domanda Come estrarre i file in un'altra directory usando il comando 'tar'?


ho pensato tar archive.tar /users/mylocation funzionerebbe, ma non è così. Come lo posso fare?


581
2018-05-26 16:01


origine


Anche, -C, --directory DIR\n change to directory DIR dovrebbe piuttosto essere descritto come change output directory to DIR (will fail if DIR doesn't exist). Grazie a @Mich. Vedi anche la risposta di @ Bryan_Larsen. - valid
@ Ujjwal Sing: In effetti, la pagina man di tar non è molto utile. Descrive "-C DIR" come "cambia nella directory DIR". Ancora peggio: "tar -C mydir xf archive.tar" non funziona, mentre "tar xf archive.tar -C mydir" fa. - Pat Morin


risposte:


Per estrarre un archivio in una directory diversa dalla corrente, usa il -C, o --directory, opzione tar, come in

tar -xf archive.tar -C /target/directory

Si noti che la directory di destinazione deve esistere prima di eseguire quel comando (può essere creato da mkdir /target/directory).

Leggi il pagina di manuale (comando: man tar) per altre opzioni.


841
2018-05-26 16:16



Devi però creare la directory manualmente. - Jürgen Paul
Il percorso può essere rimosso: basta recuperare il file - zzapper
Se si tratta di un file più grande, quando si esegue il comando, tutto ciò che si ottiene non viene emesso per diversi secondi o addirittura minuti mentre funziona. Puoi sistemarlo aggiungendo il -v bandiera (modalità verbosa) che elenca il nome di ciascun file mentre lo estrae. - IQAndreas
@consultstan xkcd.com/1168 - Duncan X Simpson
Non è sorprendente che, dopo tutti questi anni, con tutte le opzioni tar ha accumulato, non c'è ancora un'opzione per crea la directory di output se non esiste? - EM0


Nota che se il tuo tarball contiene già un nome di directory che vuoi cambiare, aggiungi il --strip-components=1 opzione:

tar xf archive.tar -C /target/directory --strip-components=1

215
2018-05-21 18:32



Grazie. I download tramite wget / etc hanno sempre una directory "principale". Questa è la risposta completa imo - o dovrebbe essere notato nella risposta sopra. - bshea


Combinando le risposte e i commenti precedenti:

Per estrarre semplicemente il contenuto e creare la directory di destinazione, se manca:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Per estrarre e rimuovere anche la directory root (primo livello) nel file zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

20
2018-06-27 19:29





Un'altra opzione è usare --one-top-level. Questo creerà automaticamente una directory basata sul nome del file dell'originale.

tar zxvf filename.tgz --one-top-level

Inoltre, se lo desideri, puoi specificarne uno e tar lo creerà automaticamente.

tar zxvf filename.tgz --one-top-level=new_directory

6
2018-03-22 21:49





Con tar 1.29, possiamo semplicemente aggiungere il nome della directory dopo il nome file tar. Per esempio,

tar zxvf tar-file directory-name/

1
2018-06-29 23:00





Quello che ho trovato interessante in relazione all'estrazione è che dipende da come hai creato l'archivio, vedi questo esempio

cd /tmp
mkdir folder
touch folder/file.txt

quando lo fai tar -zcvf folder.tar.gz folder tutto è come previsto = quando lo decompilate ora verrà rimosso (la cartella verrà creata, se l'hai rimossa) come /tmp/folder/.

Ma, quando creerai tar come tar -zcvf tmp-folder.tar.gz /tmp/folder e tu lo decomprimi nella cartella / tmp, il risultato sarà /tmp/tmp/folder directory! In tal caso devi decomprimerlo su / - tar -xf tmp-folder.tar.gz -C /


0
2017-09-01 22:25