GNU/Linux >> Linux Esercitazione >  >> Linux

estrarre un singolo file da un enorme file tgz

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à


Linux
  1. Come estrarre i file dall'archivio dei pacchetti Debian DEB

  2. Tar:estrarre un singolo file in una directory senza creare sottocartelle?

  3. Come estrarre un singolo attributo da un file XML?

  4. Come estrarre o decomprimere il file tar.xz in Linux

  5. Apertura di un file .tar.gz con un singolo comando

Come estrarre o decomprimere i file tar.gz dalla riga di comando di Linux

Come estrarre (decomprimere) il file Tar Gz

Come estrarre (decomprimere) il file Tar Bz2

Come estrarre (decomprimere) il file tar.xz

Errore di output dall'archivio:Tar.xz:formato file non riconosciuto?

Estrai il file tar.gz in Linux