Domanda

Ho un gran numero di file in un archivio .tar.gz. Verifica del tipo di file con il comando

file SMS.tar.gz

dà la risposta

gzip compressed data - deflate method , max compression

Quando provo ad estrarre l'archivio con gunzip, dopo un ritardo ricevo il messaggio

gunzip: SMS.tar.gz: unexpected end of file

Esiste un modo per recuperare anche parte dell'archivio?

È stato utile?

Soluzione

Sei sicuro che si tratti di un file gzip? Per prima cosa esegui "file SMS.tar.gz" per convalidarlo.

Quindi leggerei la pagina The gzip Recovery Toolkit .

Altri suggerimenti

Il recupero è possibile ma dipende da cosa ha causato la corruzione.

Se il file viene appena troncato, ottenere un risultato parziale non è troppo difficile; basta eseguire

gunzip < SMS.tar.gz > SMS.tar.partial

che fornirà un output nonostante l'errore alla fine.

Se il file compresso ha blocchi mancanti di grandi dimensioni, è praticamente senza speranza dopo il blocco danneggiato.

Se il file compresso viene sistematicamente danneggiato in piccoli modi (ad esempio, trasferendo il file binario in modalità ASCII, che distrugge i ritorni a capo e le nuove righe in tutto il file), è possibile ripristinare ma richiede un po 'di programmazione personalizzata, è davvero ne vale la pena solo se non si ha assolutamente altro ricorso (nessun backup) e i dati valgono molto sforzo. (L'ho fatto con successo.) Ho citato questo scenario in una domanda precedente .

Le risposte per i file .zip differiscono in qualche modo, poiché gli archivi zip hanno più membri compressi separatamente, quindi c'è più speranza (anche se la maggior parte degli strumenti commerciali sono piuttosto falsi, eliminano gli avvisi rattoppando i CRC, non recuperando buoni dati). Ma la tua domanda riguardava un file .tar.gz, che è un archivio con un grande membro.

Ecco uno scenario possibile che abbiamo riscontrato. Avevamo un file tar.gz che non si decomprimeva, il tentativo di decomprimere ha dato l'errore:

gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated

Ho capito che il file potrebbe originariamente caricato su una connessione ftp non binaria (non lo sappiamo per certo).

La soluzione era relativamente semplice usando l'utility unix dos2unix

dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt 
....etc.

Ha funzionato! Questa è una minima possibilità, e forse vale la pena provare - potrebbe aiutare qualcuno là fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top