it-swarm.com.de

Mac Zip-Komprimierung ohne __MACOSX-Ordner?

Wenn ich Dateien mit dem integrierten Zip-Kompressor in Mac OSX komprimiere, wird ein zusätzlicher Ordner mit dem Titel "__MACOSX" erstellt, der in der extrahierten Zip-Datei erstellt wird.

Kann ich meine Einstellungen anpassen, um die Erstellung dieses Ordners zu verhindern, oder muss ich ein Komprimierungswerkzeug eines Drittanbieters kaufen?

UPDATE: Ich habe gerade eine Freeware-App für OSX gefunden, die mein Problem löst: " YemuZip "

UPDATE 2: YemuZip ist keine Freeware mehr 

136
Scott B

Als ich dieses Problem hatte, habe ich es von der Kommandozeile aus gemacht:

Zip file.Zip uncompressed

EDIT, nach vielen Downvotes: Ich habe diese Option vor einiger Zeit benutzt und weiß nicht, wo ich sie gelernt habe, daher kann ich Ihnen keine bessere Erklärung geben. Chris Johnsons answer ist richtig, aber ich lösche meine nicht. Wie ein Kommentar sagt, ist es genauer, was OP verlangt, da es ohne diese Dateien komprimiert, anstatt sie aus einer komprimierten Datei zu entfernen. Es fällt mir auch leichter, sich zu erinnern.

64
sinuhepop

Kann nach dem Faktum durch Zip -d filename.Zip __MACOSX/\* behoben werden

286
Chris Johnson

In dem Ordner, den Sie komprimieren möchten, im Terminal:

Zip -r -X Archive.Zip *

Wobei -X bedeutet: Schließen Sie die unsichtbaren Mac-Ressourcendateien wie "_MACOSX" oder "._Filename" und .ds-Speicherdateien aus

Quelle

Hinweis: Funktioniert nur für den Ordner und die nachfolgende Ordnerstruktur, in der Sie sich befinden, und muss den *-Platzhalter haben.

45
pompalini

Dieser Befehl hat es für mich getan:

Zip -r Target.Zip Source -x "*.DS_Store"

Target.Zip ist die zu erstellende Zip-Datei. Source ist die Quelldatei/den Ordner, in den das ZIP-Archiv kopiert werden soll. Der Parameter _x gibt an, dass die Datei/der Ordner nicht enthalten sein soll. Wenn das Obige aus irgendeinem Grund nicht funktioniert, versuchen Sie es stattdessen:

Zip -r Target.Zip Source -x "*.DS_Store" -x "__MACOSX"
23
Adil Hussain

Ich verwende dieses Automator-Shell-Skript, um es nach ... zu beheben. Es erscheint als Kontextmenüelement (Rechtsklick auf eine Datei, die im Finder angezeigt wird).

while read -r p; do
  Zip -d "$p" __MACOSX/\* || true
  Zip -d "$p" \*/.DS_Store || true
done
  1. Erstellen Sie einen neuen Service mit Automator
  2. Wählen Sie "Dateien und Ordner" im "Finder".
  3. Hinzufügen einer "Shell Script Action"

 automator Shell script

 contextual menu item in Finder

14
benedikt

Die unerwünschten Ordner können auf folgende Weise gelöscht werden:

Zip -d filename.Zip "__MACOSX*"

Funktioniert am besten für mich

7
SabU

Das Zip-Befehlszeilendienstprogramm erstellt niemals ein __MACOSX-Verzeichnis. Sie können also einfach einen Befehl wie folgt ausführen:

Zip directory.Zip -x \*.DS_Store -r directory

In der folgenden Ausgabe enthält a.Zip, das ich mit dem Befehlszeilenhilfsprogramm Zip erstellt habe, kein __MACOSX-Verzeichnis, sondern a 2.Zip, das ich mit dem Finder erstellt habe.

$ touch a
$ xattr -w somekey somevalue a
$ Zip a.Zip a
  adding: a (stored 0%)
$ unzip -l a.Zip
Archive:  a.Zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
 --------                   -------
        0                   1 file
$ unzip -l a\ 2.Zip # I created `a 2.Zip` from Finder before this
Archive:  a 2.Zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
        0  01-02-16 20:31   __MACOSX/
      149  01-02-16 20:29   __MACOSX/._a
 --------                   -------
      149                   3 files

-x .DS_Store schließt .DS_Store-Dateien in Verzeichnissen nicht aus, -x \*.DS_Store jedoch nicht.

Die oberste Datei eines Zip-Archivs mit mehreren Dateien sollte normalerweise ein einzelnes Verzeichnis sein, da andernfalls einige nicht archivierende Programme (wie unzip und 7z, aber nicht Archivierungsprogramm, The Unarchiver, unar oder dtrx) ein Archiv erstellen Enthält das Verzeichnis für die Dateien, wenn das Archiv extrahiert wird, was das Finden der Dateien oft erschwert, und wenn mehrere Archive gleichzeitig extrahiert werden, kann es schwierig sein zu erkennen, welche Dateien zu welchem ​​Archiv gehören.

Das Archivierungsprogramm erstellt ein __MACOSX-Verzeichnis nur, wenn Sie ein Archiv erstellen, in dem mindestens eine Datei Metadaten enthält, z. B. erweiterte Attribute, Dateiflaggen oder einen Ressourcenzweig. Das Verzeichnis __MACOSX enthält AppleDouble-Dateien, deren Dateiname mit ._ beginnt und zum Speichern von OS X-spezifischen Metadaten verwendet wird. Das Befehlszeilenhilfsprogramm Zip verwirft Metadaten wie z. B. erweiterte Attribute, Dateiflaggen und Ressourcengabeln. Dies bedeutet auch, dass Metadaten wie Tags verloren gehen und dass Aliasnamen nicht mehr funktionieren, da die Informationen in einer Aliasdatei in einem Ressourcenzweig gespeichert werden.

Normalerweise können Sie nur die OS X-spezifischen Metadaten verwerfen. Um jedoch zu sehen, welche Metadatendateien enthalten sind, können Sie xattr -l verwenden. xattr enthält auch Ressourcen-Forks und Dateiflaggen, da sie zwar nicht als erweiterte Attribute gespeichert werden, aber über die Schnittstelle für erweiterte Attribute auf sie zugegriffen werden kann. Sowohl das Archivierungsprogramm als auch das Befehlszeilenprogramm Zip verwerfen ACLs.

3
nisetama

keine versteckten Dateien komprimieren:

Zip newzipname filename.any  -x "\.*"

mit dieser Frage sollte es so aussehen:

Zip newzipname filename.any  -x "\__MACOSX"

Es muss jedoch gesagt werden, dass der Zip-Befehl in einem Terminal ausgeführt wird, indem nur die Datei komprimiert wird, andere jedoch nicht. Also das Ergebnis ist das gleiche:

Zip newzipname filename.any
2
Xian Shu

Meinen Sie das Befehlszeilenprogramm Zip oder den Befehl Komprimierung des Finders?

Für Zip können Sie die Option --data-fork ausprobieren. Wenn dies nicht der Fall ist, können Sie --no-extra versuchen, obwohl dies andere Dateimetadaten zu ignorieren scheint, die möglicherweise von Wert sind, wie z. B. uid/gid und Dateizeiten.

Ich glaube nicht, dass es für den Finder-Befehl "Komprimieren" Optionen gibt, um sein Verhalten zu steuern. Es ist für den einfachen Fall.

Das andere Werkzeug, und möglicherweise das, das der Finder tatsächlich unter der Haube verwendet, ist ditto. Mit den -c -k-Optionen werden Zip-Archive erstellt. Mit diesem Tool können Sie mit --norsrc, --noextattr, --noqtn, --noacl experimentieren und/oder einfach die --sequesterRsrc-Option (die laut Manpage möglicherweise für das __MACOSX-Unterverzeichnis verantwortlich ist) weglassen. Vielleicht bedeutet das Fehlen von --sequesterRsrc jedoch einfach die Verwendung des AppleDouble-Formats, wodurch überall ._-Dateien anstelle eines __MACOSX-Verzeichnisses erstellt werden.

1
Ken Thomases
Zip -r "$destFileName.Zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX": ignorieren Sie __MACOSX, wie Sie es erwähnen.
  • -x "*/\.*": Ignoriere verborgene Dateien wie .DS_Store.
  • Zitieren Sie die Variable, um eine Datei zu vermeiden, wenn sie mit SPACE bezeichnet wird.

Sie können auch den Automator-Dienst erstellen, um die Verwendung in Finder ..__ zu erleichtern.

Github

1
Jian Jason

Du kannst nicht 

Sie können diese unerwünschten Ordner jedoch nach dem Zippen löschen. Die Befehlszeile Zip verwendet verschiedene Argumente, wobei -d zum Löschen von Inhalten verwendet wird, die auf einem regulären Ausdruck basieren. So kannst du es so benutzen:

Zip -d filename.Zip __MACOSX/\*

So vermeide ich das Verzeichnis __MACOSX beim Komprimieren von Dateien mit dem Befehl tar:

$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.Apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.Apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.Apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55

Löschen Sie zuerst das Attribut:

find . | xargs xattr -d com.Apple.quarantine

Führen Sie find . | xargs xattr -l erneut aus und stellen Sie sicher, dass keine Datei das Attribut xattr hat. dann bist du gut zu gehen:

tar cjvf file.tar.bz2 dir

0
Zhang Huangbin

Ich habe eine bessere Lösung, nachdem ich alle vorhandenen Antworten gelesen habe. Mit einem einzigen Rechtsklick kann alles durch einen Workflow erledigt werden. NO zusätzliche Software, NO komplizierte Befehlszeileninhalte und NO Shell-Tricks.

Der Automator-Workflow:

  • Eingabe: Dateien oder Ordner aus einer beliebigen Anwendung.
  • Schritt 1: Archiv erstellen, das System ist mit Standardparametern ausgestattet.
  • Schritt 2: Führen Sie den Shell-Befehl mit der Eingabe als Parameter aus. Befehl unten kopieren.

    Zip -d "[email protected]" "__MACOSX/*" || true

    Zip -d "[email protected]" "*/.DS_Store" || true

Speichern Sie es und wir sind fertig! Klicken Sie einfach mit der rechten Maustaste auf einen Ordner oder einen Großteil der Dateien und wählen Sie im Menü Dienste den Workflow aus. Ein Archiv ohne Metadaten wird erstellt.

 Sample

0
ttimasdf