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-readper estrarre solo la prima voce di archivio che corrisponde all'operando del nome file,path/to/filein 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à