Come decomprimere un tar.gz in un'altra directory


270

Ho un archivio

* .tar.gz

Come posso decomprimerlo in una directory di destinazione?


9
Perché tutti i downvotes? Ci sono più opzioni oltre a -C (e forse la sua versione non lo fornisce).
Alfe,

2
Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non si tratta di programmazione o sviluppo. Consulta quali argomenti posso chiedere qui nel Centro assistenza. Forse Super User o Unix & Linux Stack Exchange sarebbero un posto migliore da chiedere.
jww

@jww Mentre vedo il tuo punto, in questo forum abbiamo anche dei tag con nome tare in gzgiro . L'estrazione di un tarball in una directory specifica può far parte di uno script di shell e quindi parte della programmazione. Immagino che questo tipo di domanda possa essere fatta in entrambi i forum.
Alfe,

Risposte:


319

È possibile utilizzare l'opzione -C(o --directoryse si preferiscono opzioni lunghe) per fornire la directory di destinazione desiderata nel caso in cui si utilizzi la versione Gnu di tar. La directory dovrebbe esistere:

mkdir foo
tar -xzf bar.tar.gz -C foo

Se non si utilizza una tarcapacità di estrazione in una directory specifica, è possibile semplicemente cdaccedere alla directory di destinazione prima di chiamare tar; allora dovrai dare un percorso completo al tuo archivio, ovviamente. È possibile farlo in una subshell di scoping per evitare di influenzare lo script circostante:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

In alternativa, se non è adatto né un percorso assoluto né un percorso relativo al file di archivio, è possibile utilizzare anche questo per nominare l'archivio al di fuori della subshell di scoping:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

oppure, con tar GNU

tar xzf archive.tar.gz -C /destination

3
Mi piace l'idea di utilizzare gzipnel caso in cui tar non capisca gli archivi zippati.
Alfe,

4

Estrae myArchive.tar in / destinationDirectory

comandi:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

0

Puoi usare for loop per decomprimere più file .tar.gz in un'altra cartella. Il seguente codice prenderà / destinazione / cartella / percorso come argomento per lo script e annullerà la decompressione di tutti i file .tar.gz presenti nella posizione corrente in / destinazione / cartella / percorso.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
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.