Ich habe ein merkwürdiges Problem und kann nicht herausfinden, was los ist. Ich habe eine tgz-Datei, scip-3.2.0.tgz , die einen Fehler ausgibt , wenn ich versuche, sie zu entpacken. Der Fehler tritt nur unter OS X auf (ich bin auf 10.10.4). Ich kann die Datei ohne Fehler auf einer Linux-Box mit CentOS 6.6 extrahieren. Der Fehler tritt sowohl bei Verwendung des Befehlszeilenbefehls tar
als auch bei Verwendung des Archivierungsdienstprogramms auf. Ich habe die SCIP-Mailingliste per E-Mail gesendet und habe denselben SHA-1-Hash wie ein anderer Benutzer ( e085a4a3591eddf945dcb365d97d2512c267e374
), sodass kein Download-Fehler aufgetreten ist. Sie sind sich nicht sicher, was los ist.
Die folgende Fehlermeldung wird angezeigt, wenn ich versuche, mit dem Archivierungsdienstprogramm zu entpacken:
Für den Fall, dass das Bild jemals kaputt geht, lautet der Text im Bild wie folgt:
"Scip-3.2.0.tgz" kann nicht in "Desktop" erweitert werden.
(Fehler 1 - Vorgang nicht zulässig.)
Und wenn ich versuche, über die Befehlszeile zu entpacken, erhalte ich diese Ausgabe . Es ist die letzte Zeile ( tar: Error exit delayed from previous errors.
), die mich betrifft. Ich sehe nicht, was es verursacht. Das Archiv scheint ohne Probleme zu extrahieren, aber ich vertraue nicht darauf, dass dieser Fehler ausgelöst wird.
Weiß jemand, was das verursacht?
[edit] Bei
genauerer Betrachtung der Ausgabe enthält Zeile 1108 den Fehler:
x scip-3.2.0/applications/Coloring/Makefile: Can't create 'scip-3.2.0/applications/Coloring/Makefile'
tar
Befehl, der mit OS Xgunzip -c scip-3.2.0.tgz | tar xopf -
Skript ausführen, wie Sie es für Ihr Skript verwenden würden?gunzip
funktioniert einwandfrei, aber wenn ich versuche, das unkomprimierte Tarball zu extrahieren, wird der Fehler ausgelöst.Antworten:
Dies sollte helfen, herauszufinden, was in Johnnys Antwort vor sich geht , und die Frage zu beantworten , warum dies unter Linux, aber nicht auf Mac funktioniert.
Das Problem liegt in der Tatsache, dass Mac OS X verwendet
bsdtar
, während die meisten Linux-Systeme verwendengnutar
.Sie können installieren
gnutar
auf einem Mac mit Homebrew verwendenbrew install gnu-tar
, die Symlink wirdgnutar
in/usr/local/bin
sogtar
.Wenn Sie installieren
gnutar
, können Sie das Problem anhand der Schritte in Johnnys Antwort reproduzieren .Offensichtlich werden die
gnutar
Dinge also anders archiviert, sodassbsdtar
Duplikate erstickt werden. Die Tatsache,gtar -ztvf test.tar.gz
dass die zweite Instanz vontest/a
als a archiviert wird,link to test/a
ist relevant. Wie Johnny in den Kommentaren hervorhebt,gnutar
werden Duplikate als feste Links und nicht als tatsächliche Dateien gespeichert, mit denen deaktiviert werden kann--hard-dereference
.Das heißt, Sie könnten Folgendes tun:
In diesem Fall haben Sie jedoch offensichtlich keinen Einfluss auf die Erstellung des Tarballs. Daher ist dies
--hard-dereference
keine Option. Zum Glück scheint es , basierend auf der Antwort des OP , dass dieses Problem durch den Upstream behoben wurde.Wenn jedoch in Zukunft jemand anderes auf dieses Problem stößt und eine schnelle Lösung benötigt oder einen nicht reagierenden Upstream-Betreuer hat, gibt es eine Problemumgehung.
Sobald Sie die doppelte Datei identifiziert haben, können Sie die
--fast-read
Option von verwendenbsdtar
(beachten Sie, dass diese Option nur ein Teil von istbsdtar
, nichtgnutar
):In dem Spielzeugbeispiel, das ich in Anlehnung an das Spielzeugbeispiel in Johnnys Antwort erstellt habe , lautet die doppelte Datei
test/a
. So können Sie dieses Problem vermeiden, indem Sie folgendermaßen vorgehen:Beachten Sie außerdem, dass Sie
gnutar
gerne ein Archiv mit Duplikaten entpacken, die selbst erstellt wurden, auch wenn die--hard-dereference
Option nicht verwendet wurde:Dies beantwortet also Ihre Frage, warum ein Fehler auf Mac, aber nicht auf Linux ausgegeben wird. (Die meisten) Linux-Distributionen werden mit ausgeliefert
gnutar
, und da der Tarball vermutlich mit gepackt wurde , trittgnutar
beim Entpacken kein Fehler aufgnutar
, aber beim Entpacken mitbsdtar
.Zur weiteren Lektüre und zum Nachschlagen möchte man vielleicht einen Blick auf Was sind die Unterschiede zwischen bsdtar und GNU tar? auf Unix.SE.
quelle
gtar -tcvf
ist gnutar "intelligent" genug, um die zweite Kopie als Link zu optimieren, anstatt sie im Archiv zu duplizieren.--hard-dereference
Option geben, wird dieses Verhalten deaktiviert.Das Vorhandensein einer doppelten Datei im Archiv sollte diese nicht ungültig machen oder unter OSX nicht extrahiert werden können, da tar standardmäßig doppelte Dateien überschreibt.
Also, ich bin ein wenig durch das Verhalten in Ihrem Gist verwirrt - OSX tar für doppelte Dateien in einem Archiv ermöglicht (eine Reminiszenz an seinen ursprünglichen Zweck als t Affe ar schnittlauch Dienstprogramm, so dass es Dateien können an das Ende angehängt werden Das Bandarchiv. Wenn das Archiv wiederhergestellt wird, überschreibt die neueste Version der Datei die ältere (n) Version (en).
Nur wenn die Option "-k" vorhanden ist, sollte tar vor bereits vorhandenen Dateien warnen.
Hier habe ich ein Archiv mit einer doppelten Datei erstellt und es dann ohne Probleme extrahiert. Erst als ich die Option -k hinzugefügt habe, wurde ich vor der doppelten Datei gewarnt:
Ein einfaches Umask-Problem scheint auch nicht der Schuldige zu sein. Ich habe versucht, meine Umask auf 0777 zu ändern und kann das Archiv trotzdem extrahieren:
Ich dachte, ich könnte das Problem duplizieren, indem ich absichtlich ein nicht beschreibbares Verzeichnis an das Archiv anhänge, aber das funktionierte nicht, tar aktualisierte die Berechtigungen für das Verzeichnis nicht, als es das Archiv extrahierte:
Ich habe auch versucht, die Berechtigungen für test / a in 000 zu ändern, sie an das Archiv anzuhängen und dann einen weiteren Test / a anzuhängen, aber dieser hat auch funktioniert:
Daher würde ich gerne das Originalarchiv sehen, das das Problem verursacht hat, und sehen, was in diesem Archiv enthalten sein könnte, um dieses Problem zu verursachen.
Wenn ein Dateiname und ein Verzeichnis denselben Namen haben, hat tar zwar ein Problem beim Extrahieren, aber eine ziemlich klare Fehlermeldung:
(Wenn der Konflikt umgekehrt aufgetreten ist, dh eine Datei zuerst kam, dann kam ein Verzeichnis mit dem gleichen Namen später, tar entfernt es einfach und erstellt das Verzeichnis:
quelle
Es stellte sich heraus, dass das OS X-Dienstprogramm tar das richtige war! Es ist tatsächlich ein Fehler im Archiv aufgetreten. In diesem E-Mail-Thread wird dies ausführlicher beschrieben. Das Problem besteht jedoch darin, dass das Archiv eine doppelte Datei enthält . Die SCIP-Leute reparieren das Archiv, während ich das schreibe.
[edit]
Die neu aktualisierte scip-3.2.0.tgz wird jetzt ganz gut extrahiert! Der SHA-1 Hash des neuen TGZ ist
5b4e8283f4a5bf9e50f9a62d4320d6f5f50c8476
.[edit 2]
Es ist nicht so, dass es einen Fehler im Archiv gibt. Es ist einfach so, dass das
bsdtar
, was mit OS X geliefert wird, doppelte Dateien anders behandelt als dasgnutar
, was mit Linux geliefert wird. @ Adam Liter Antwort hier bietet eine gründliche Erklärung dessen , was geschieht.quelle
-k
Option nicht angegeben haben, wodurch vor bereits vorhandenen Dateien gewarnt würde. Leider haben sie diescip-3.2.0.tgz
Datei bereits aktualisiert , um die Dupe zu entfernen, sodass ich dieses Archiv nicht testen kann.tar
Extrakt reagiert unterschiedlich,scip-3.2.0/applications/Coloring/Makefile
je nachdem, ob Sie versuchen, ihn zweimal zu extrahierenumask
. Wenn der erste erstellte keinen Schreibzugriff hinterlässt, schlägt der zweite Versuch fehl.Es gibt eine alternative, kostenlose und leichte Archivierungssoftware, die ich für Mac OS X verwende. Es heißt Keka und ich benutze es, um 7zip speziell zu entpacken. Außerdem kann es andere Typen wie .rar, .tar, .gz usw. entpacken. Es funktionierte auch für die spezifische TAR-Datei des OP, aber ich habe es versucht, nachdem @Geoff erwähnt hatte, dass das Team daran arbeitete, die Datei zu reparieren.
quelle