2015-03-09 3 views
12

Ich gezippt ein Verzeichnis auf meinem Mac OSX mit der zip Befehlszeile und -r Option. I scp die .zip zu einem Cluster unter Linux.Fehler, wenn `tar` ein `.zip` auf Linux

Wenn ich versuche, die .zip mit

tar -vxzf foo.zip

auf meinem Rechner zu dekomprimieren es funktioniert. Aber derselbe Befehl funktioniert nicht auf dem Cluster. Ich erhalte den Fehler

gzip: stdin has more than one entry--rest ignored 
tar: Child returned status 2 
tar: Error is not recoverable: exiting now 

Wie kann ich dieses Problem lösen?

Antwort

25

Der tar Befehl TAR-Archive zum Entpacken, nicht zip-Dateien. Sie sollten entweder die unzip Befehl statt tar:

unzip foo.zip 

Oder machen Sie ein tar.gz Archiv auf der Seite Mac statt eine Zip-Datei

tar -cvzf foo.tar.gz .... 

, die Sie mit Ihrem vorhandenen tar Befehl auf der Linux-Seite entpacken können.

+0

Klingt offensichtlich jetzt +1. Ich wusste nicht wirklich, was das TAR-Archiv ist. Übrigens, warum hat 'tar' dann' .zip' auf meinem Mac bearbeitet? Danke vielmals. –

+4

@ Remi.b tar auf dem Mac ist eine Version von BSD tar und nicht das GNU tar, das auf Linux-Distributionen verwendet wird. [Die Apple Man-Seite] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/tar.1.html) schlägt vor, dass Mac tar mit Zip-Dateien umgehen kann, aber GNU tar kann ' t (außer in dem in der anderen Antwort beschriebenen begrenzten Fall). –

2

Standard GNU tar behandelt .zip Dateien nicht direkt. Ich bin überrascht, dass MacOSX damit klarkommt.

Das Problem ist, dass tar weiß, wie gzip Dateien zu handhaben, die nicht Info-Zip (.zip)-Format-Dateien sind. Info-Zip-Dateien sind für Archivierung und Komprimierung ausgelegt, während tar dies nicht tut. (Die meisten tar Implementierungen werden nun filtern die tar Datei mit dem richtigen Kompressor/Dekompressor auf der Grundlage der Befehlszeilenoptionen.)

Verwenden unzip auf dem Cluster statt. Das ist das Programm, das entwickelt wurde, um .zip Dateien zu behandeln. Sie sollten tar überhaupt nicht benötigen.