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

Sto utilizzando questo comando su un 5 GB archivio

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

è questo il modo corretto per farlo? Sembra che stia impiegando uneternità senza loutput della riga di comando …

Commenti

  • Hai usato un percorso assoluto o relativo? Dovrebbe essere relativo, a parte questo sembra giusto. Quanto tempo lhai lasciato funzionare e quanto è buono il tuo sistema? Ci vorranno almeno diversi minuti su una macchina veloce. Potenzialmente unora o più? ' sto eseguendo un test ora.
  • Sì, è stato completato dopo ~ 1 ora, ma il percorso assoluto era sbagliato, avevi ragione.
  • Su Linux, puoi vedere quanto si trova nellarchivio tar con cat /proc/$(pidof tar)/fdinfo/0 (adatta il comando se ne hai più di uno tar processo in esecuzione).
  • La parte importante è anche lassenza di una barra finale. Lutilizzo di folder/folder2/ non ha ' funzionato.

Risposta

tar memorizza i percorsi relativi per impostazione predefinita . GNU tar lo dice anche se provi a memorizzare un percorso assoluto:

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

Se hai bisogno di estrarre una cartella particolare, dai unocchiata a cosa cè dentro il file tar:

tar -tvf foo.tar 

e prendi nota del nome esatto del file. Nel caso del mio file foo.tar, potrei estrai /home/foo/bar dicendo:

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

Quindi no, il modo in cui hai postato non è (necessariamente) corretto modo per farlo. Devi lasciare fuori il taglio iniziale. Se desideri simulare percorsi assoluti, esegui prima cd / 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 ragioni molto ovvie e valide per cui tar converte i percorsi in percorsi relativi. Uno è la possibilità di ripristinare un archivio in posti diversi dalla sua fonte originale. altro è la sicurezza. Potresti estrarre un archivio, aspettarti che i suoi file appaiano nella directory di lavoro corrente e invece sovrascrivere i file di sistema (o il tuo lavoro) altrove per errore.

Nota: se usi il -P opzione, tar archivia percorsi assoluti. Quindi è sempre utile controllare il contenuto di grandi archivi prima di estrarli.

Commenti

  • --strip-components=N può essere utile ad alcuni qui.
  • nel mio caso era necessario scrivere ./foldername/ invece di , immagino che fosse perché quando ho creato il tar lho creato con tar -cvf santi.tar ./* e quando ho " elencato " il tar questo è quello che diceva drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • E su .gz?
  • @PeterKrauss cambia -xvf in -xzvf (aggiungendo -z) e ovviamente da foo.tar a foo.tar.gz o qualunque sia il nome del tuo archivio. Lo stesso vale per -j (bz2) e su alcune versioni recenti -J (xz). Altrimenti, funziona anche una pipeline come zcat foo.tar.gz | tar -xvf - ….
  • E ricorda, se sei stanco di tutto loutput dettagliato durante lestrazione, salta il v in tutti gli esempi. Ad esempio, tar -tf foo.tar e tar -xf foo.tar ....

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *