J'ai un grand nombre de fichiers dans une archive .tar.gz. Vérification du type de fichier avec la commande
file SMS.tar.gz
donne la réponse
gzip compressed data - deflate method , max compression
Lorsque j'essaie d'extraire l'archive avec gunzip, après un certain temps, je reçois le message
gunzip: SMS.tar.gz: unexpected end of file
Existe-t-il un moyen de récupérer même une partie de l'archive?
Êtes-vous sûr qu'il s'agit d'un fichier gzip? Je voudrais d'abord exécuter le "fichier SMS.tar.gz" pour valider cela.
Ensuite, je lirais la page The gzip Recovery Toolkit .
La récupération est possible mais elle dépend de la cause de la corruption.
Si le fichier est juste tronqué, obtenir un résultat partiel n'est pas trop difficile; il suffit de courir
gunzip < SMS.tar.gz > SMS.tar.partial
ce qui donnera une sortie malgré l'erreur à la fin.
Si le fichier compressé contient de gros blocs manquants, il est essentiellement sans espoir après le mauvais bloc.
Si le fichier compressé est systématiquement corrompu de petites manières (par exemple en transférant le fichier binaire en ASCII, qui écrase les retours chariot et les retours à la ligne dans le fichier), il est possible de récupérer mais nécessite beaucoup de temps de la programmation personnalisée, cela ne vaut vraiment la peine que si vous n'avez absolument aucun autre recours (pas de sauvegardes) et que les données valent beaucoup d'efforts. (Je l'ai fait avec succès.) J'ai mentionné ce scénario dans un question précédente .
Les réponses pour les fichiers .Zip diffèrent quelque peu, car les archives Zip ont plusieurs membres compressés séparément, donc il y a plus d'espoir (bien que la plupart des outils commerciaux soient plutôt faux, ils éliminent les avertissements en corrigeant les CRC, pas en récupérant de bonnes données). Mais votre question portait sur un fichier .tar.gz, qui est une archive avec un gros membre.
Voici un scénario possible que nous avons rencontré. Nous avions un fichier tar.gz qui ne décompressait pas, essayer de décompresser a donné l'erreur:
gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated
J'ai compris que le fichier peut avait été initialement téléchargé sur une connexion ftp non binaire (nous ne savons pas avec certitude).
La solution était relativement simple en utilisant unix dos2unix
utilitaire
dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt
....etc.
Ça a marché! C'est une mince possibilité, et cela vaut peut-être la peine d'essayer - cela peut aider quelqu'un là-bas.