Sfortunatamente, per decomprimere un singolo membro di .tar.gz
archive devi elaborare l'intero archivio e non puoi fare molto per risolverlo.
Qui è dove .zip
(e alcuni altri formati come .rar
) funzionano molto meglio, perché zip
format ha la directory centrale di tutti i file in esso contenuti con offset diretti che puntano al centro del zip
file, in modo che i membri dell'archivio possano essere estratti rapidamente senza elaborare tutto.
Potresti chiedere perché elaborare .tar.gz
è così lento?
.tar.gz
(spesso abbreviato come .tgz
) è semplicemente .tar
archivio compresso con gzip
compressore. gzip
è un compressore in streaming che può funzionare solo con un file. Se vuoi ottenere qualsiasi parte di gzip
stream, devi decomprimerlo nel suo insieme, e questo è ciò che lo uccide davvero per .tar.gz
(e per .tar.bz2
, .tar.xz
e altri formati simili basati su .tar
).
.tar
formato è in realtà molto, molto semplice. È semplicemente un flusso di intestazioni di file o directory da 512 byte (nome, dimensione, ecc.), Ciascuno seguito dal contenuto di file o directory (riempito a 512 dimensioni del blocco con 0 byte se necessario). Quando osservi un blocco 512 totalmente nullo per un'intestazione, questo significa la fine di .tar
archivio.
Alcune persone pensano che anche .tar
non è possibile accedere rapidamente ai membri dell'archivio, ma questo non è del tutto VERO. Se .tar
archive contiene pochi file di grandi dimensioni, in realtà puoi cercare rapidamente nell'intestazione successiva e quindi puoi trovare il membro dell'archivio necessario in poche ricerche (ma potrebbe comunque richiedere tante ricerche quanti sono i membri dell'archivio). Se il tuo .tar
L'archivio contiene molti file minuscoli, ciò significa che il recupero rapido dei membri diventa effettivamente impossibile anche per .tar
non compressi .
Se stai estraendo solo un file da un file tar di grandi dimensioni, stai usando GNU tar
, e puoi garantire che il file tar non sia mai stato aggiunto quindi puoi ottenere un significativo aumento delle prestazioni utilizzando --occurrence
.
Questa opzione dice a tar di fermarsi non appena trova la prima occorrenza di ogni file che hai richiesto, quindi ad es.
tar xf large-backup.tar --occurrence etc/passwd etc/shadow
non eseguirà lo spooling dell'intero tarball dopo aver trovato una copia di ciascuno di passwd
e shadow
, invece si fermerà. Se questi file vengono visualizzati verso la fine, il miglioramento delle prestazioni non sarà molto, ma se vengono visualizzati anche a metà di un file 500G, risparmierai molto tempo.
Per le persone che usano tar
per i backup single shot e non utilizzando unità a nastro reali questa situazione è probabilmente il caso tipico.
Tieni presente che puoi anche superare --occurrence=NUMBER
per recuperare la NUMBEResima occorrenza di ogni file, il che aiuta se sai che ce ne sono più versioni nell'archivio. Di default il comportamento è uguale a NUMBER
di 1.
Quando hai a che fare con un tarball di grandi dimensioni usa:
--fast-read
per estrarre solo la prima voce di archivio che corrisponde all'operando del nome file,path/to/file
in questo caso - che comunque è sempre unico nel tarball
tar -xvf file.tgz --fast-read path/to/file
quanto sopra cercherà finché non trova una corrispondenza e poi uscirà