Come si estrae una singola cartella da un grande archivio tar.gz?


132

Sto usando questo comando su un archivio da 5 GB

tar -zxvf archive.tar.gz /folder/in/archive

è questo il modo corretto per farlo? Sembra impiegare un'eternità senza output dalla riga di comando ...


Hai usato un percorso assoluto o relativo? Dovrebbe essere relativo, a parte quello sembra giusto. Per quanto tempo l'hai lasciato funzionare e quanto è buono il tuo sistema? Ci vorranno almeno alcuni minuti su una macchina veloce. Potenzialmente un'ora o più? Sto eseguendo un test ora.
Kevin,

Sì, è stato completato dopo ~ 1 ora, ma il percorso assoluto era sbagliato, avevi ragione.
Garrett Hall,

5
Su Linux, è possibile guardare fino a che punto in archivio tarè con cat /proc/$(pidof tar)/fdinfo/0(adattare il comando se si dispone di più di un tarprocesso in esecuzione).
Gilles,

La parte importante è anche la barra finale. L'uso folder/folder2/non funzionerà.
Marki555,

Risposte:


145

tarmemorizza i percorsi relativi per impostazione predefinita . Tar GNU lo dice anche se si tenta di memorizzare un percorso assoluto:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Se devi estrarre una cartella particolare, dai un'occhiata a cosa c'è nel file tar:

tar -tvf foo.tar

E nota il nome esatto del file. Nel caso del mio foo.tarfile, potrei estrarre /home/foo/bardicendo:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Quindi no, il modo in cui hai pubblicato non è (necessariamente) il modo corretto per farlo. Devi lasciare fuori la barra iniziale. Se vuoi simulare percorsi assoluti, esegui cd /prima e assicurati di essere il superutente. Inoltre, questo fa lo stesso:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Ci sono molte ovvie ragioni per cui tarconverte i percorsi in percorsi relativi. Uno è la possibilità di ripristinare un archivio in luoghi diversi dalla sua fonte originale. L'altro è la sicurezza. Potresti estrarre un archivio, aspettarti che i suoi file appaiano nella tua attuale directory di lavoro, e invece sovrascrivere i file di sistema (o il tuo lavoro) altrove per errore.

Nota: se si utilizza l' -Popzione, tar verranno archiviati i percorsi assoluti. Quindi vale sempre la pena controllare il contenuto dei grandi archivi prima di estrarlo.


36
--strip-components=Npuò essere utile per alcuni qui.
Acumenus,

2
nel mio caso era necessario scrivere ./foldername/invece che foldername, suppongo che fosse perché quando ho creato il tar con cui l'ho creato tar -cvf santi.tar ./*e quando ho "elencato" il tar questo è quello che dicevadrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti

1
E circa .gz?
Peter Krauss,

1
@PeterKrauss cambia -xvfin -xzvf(aggiungendo l' -zopzione) e ovviamente foo.tarin foo.tar.gzo qualunque sia il nome del tuo archivio. Lo stesso vale per -j(bz2) e su alcune versioni recenti, -J(xz). Altrimenti, zcat foo.tar.gz | tar -xvf - …funziona anche una pipeline come .
Alessio,

E ricorda, se sei stanco di tutto l'output dettagliato durante l'estrazione, salta il vin tutti gli esempi. Ad esempio, tar -tf foo.tare tar -xf foo.tar ....
Bo R
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.