Mein Rechner läuft Debian 6.0.7
und ich habe Zip 3.0 (July 5th 2008), by Info-ZIP
. Wenn ich versuche, eine .zip-Datei zu entpacken, wird in 2-3 von 10 Fällen nicht alles extrahiert. Es fehlen 2-3 Dateien.
Zuerst dachte ich, es läge an der Dateigröße und einigen mir unbekannten Einschränkungen, aber dann bemerkte ich, dass dies auch bei kleinen Dateien von 150 MB der Fall war. Dann dachte ich, es liege vielleicht daran, dass ich es über eine Bash-Skriptdatei dekomprimierte, also testete ich es mit dem manuellen Entpacken der Dateien, und auch das war nicht das Problem.
Heute habe ich es schließlich mit einer 140 MB großen ZIP-Datei überprüft. Ich habe die Datei zehnmal sowohl manuell als auch mithilfe meines .sh-Skripts entpackt und nach jedem Mal ausgeführt, ls -h -R > ../test_n.txt
um nach jeder Dekomprimierung eine Aufzeichnung des Ordners zu erstellen. Nachdem ich alle 20 Dateien verglichen hatte, stellte ich fest, dass in 7 von 20 Fällen 2 bis 8 Dateien aus der ZIP-Datei fehlten.
Hat jemand eine Idee, warum das passieren könnte?
Antwort1
Ich habe absolut keine Ahnung, was da los sein könnte. Hier sind jedoch einige Dinge, die Sie versuchen können, um das Problem zu beheben:
Wenn diese
zip
Version über ein-l
Flag oder etwas anderes verfügt, um zu überprüfen, welche Dateien sich in der ZIP-Datei befinden, ohne sie zu dekomprimieren, könnte das hilfreich sein.zip -l file.zip
Dadurch wird Ihnen der Inhalt der ZIP-Datei angezeigt. Sie sollten also nach dem Entpacken mit der gleichen Dateimenge rechnen. Sie können dies als Test in Ihrem Skript verwenden, um sicherzustellen, dass Sie immer alle Dateien entpacken.
Sind die Zip-Dateien tatsächlich korrekt? Wenn Sie die Datei aus einer anderen Quelle beziehen, berechnen Sie eine Prüfsumme der Datei und vergleichen Sie diese mit der Zip-Datei, die Sie entpacken möchten. Wenn die Summe unterschiedlich ist, kann eine Beschädigung der Datei die Ursache für das Problem sein.
Was ist der Rückgabecode für den
zip
Befehl? Nachdem Sie die Datei mit dekomprimiert habenzip
, geben Sie einenecho $?
Befehl ein, um den Rückgabecode zu prüfen. Wenn dieser von Null abweicht, teilt Ihnen das Programm mit, dass die Programmausführung insgesamt nicht erfolgreich war. Bitte beachten Sie, dass dieser Wert variieren kann, aber soweit ich weiß, ist die Verwendung von Null für Erfolg und anderer Zahlen für Fehler/Warnungen bei Unix-/Linux-Dienstprogrammen ziemlich üblich.
Ich hoffe das hilft :)