Wenn ich Dateien mit dem in Mac OS X integrierten Zip-Kompressor komprimiere, wird ein zusätzlicher Ordner mit dem Titel "__MACOSX" in der extrahierten Zip-Datei erstellt.
Kann ich meine Einstellungen anpassen, um zu verhindern, dass dieser Ordner erstellt wird, oder muss ich ein Komprimierungstool eines Drittanbieters erwerben?
UPDATE : Ich habe gerade eine Freeware-App für OSX gefunden, die mein Problem löst: " YemuZip "
UPDATE 2 : YemuZip ist keine Freeware mehr
__MACOSX
,.DS_Store
,._fileName
, und all die anderen sortierten turds Mac OS fällt in seinen Archiven. OSXs "Teer" tut dies ebenfalls - unter offensichtlicher Missachtung des Prinzips des geringsten Erstaunens .Antworten:
Als ich dieses Problem hatte, habe ich es über die Kommandozeile gemacht:
zip file.zip uncompressed
EDIT , nach vielen downvotes: ich seit einiger Zeit diese Option wurde mit vor und ich weiß nicht , wo ich es gelernt, so kann ich Ihnen nicht eine bessere Erklärung geben. Chris Johnsons Antwort ist richtig, aber ich werde meine nicht löschen. Wie ein Kommentar sagt, ist es genauer, was OP verlangt, da es ohne diese Dateien komprimiert, anstatt sie aus einer komprimierten Datei zu entfernen. Ich finde es auch einfacher, mich zu erinnern.
quelle
zip
, bei der es sich um eine Drittanbieter-App handelt, wird das __MACOSX / -Verzeichnis überhaupt nicht erstellt.zip -rX file.zip uncompressed_directory
Kann nachträglich durch behoben werden
zip -d filename.zip __MACOSX/\*
quelle
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Ersetzen Sie Ihren Ausgangspunkt für~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Verwendung:cleanzip file.zip
odercleanzip file.zip MORE_JUNK_FILES
(zweiter Parameter ist optional)Innerhalb des Ordners, den Sie komprimieren möchten, im Terminal:
Wobei -X bedeutet: Schließen Sie unsichtbare Mac-Ressourcendateien wie "_MACOSX" oder "._Dateiname" aus und speichern Sie .ds-Dateien
Quelle
Hinweis: Funktioniert nur für den Ordner und den nachfolgenden Ordnerbaum, in dem Sie sich befinden, und muss über den
*
Platzhalter verfügen .quelle
-X
Schließt .DS_Store-Dateien nicht aus. Der Grund, warum es für Ihre Anwendung möglicherweise funktioniert, ist, dass Sie nur komprimieren. Dies*
ist ein Platzhalter, der mit Dateien übereinstimmt, die nicht mit "." Beginnen. Probieren Sie es in einem Verzeichnis aus, das eine Punktdatei enthält, und Sie werden sehen, dass es enthalten ist.zip -r -X Archive.zip myfolder
auf einem Ordner , führt nach wie vor in einer ZIP - Datei mit .DS_Store Datei.Dieser Befehl hat es für mich getan:
Target.zip
ist die zu erstellende Zip-Datei.Source
ist die Quelldatei / der Quellordner zum Komprimieren. Und der_x
Parameter gibt die Datei / den Ordner an, die bzw. der nicht eingeschlossen werden soll. Wenn das oben genannte aus irgendeinem Grund nicht funktioniert, versuchen Sie stattdessen Folgendes:quelle
zip
Befehlszeilenprogramm erstellt niemals ein__MACOSX
Verzeichnis, sodass das erste Snippet funktioniert und das-x "__MACOSX"
Teil nicht benötigt wird.Ich verwende dieses Automator-Shell-Skript, um es danach zu beheben. Es wird als Kontextmenüelement angezeigt (Rechtsklick auf eine Datei, die im Finder angezeigt wird).
quelle
zip -d "$p" __MACOSX/\* || true
in Ihre Antwort.Die unerwünschten Ordner können auch folgendermaßen gelöscht werden:
Funktioniert am besten für mich
quelle
-x "*/\__MACOSX"
: Ignorieren Sie __MACOSX, wie Sie erwähnen.-x "*/\.*"
: Ignorieren Sie alle versteckten Dateien, z. B. .DS_Store.Sie können auch einen Automator-Service erstellen, um die Verwendung im Finder zu vereinfachen. Überprüfen Sie den Link unten, um Details zu sehen, wenn Sie brauchen.
Github
quelle
Das
zip
Befehlszeilenprogramm erstellt niemals ein__MACOSX
Verzeichnis. Sie können also einfach einen Befehl wie den folgenden ausführen:In der folgenden Ausgabe enthält
a.zip
die mit demzip
Befehlszeilenprogramm erstellte Ausgabe kein__MACOSX
Verzeichnis,a 2.zip
die ich jedoch mit dem Finder erstellt habe.-x .DS_Store
schließt.DS_Store
Dateien in Verzeichnissen nicht aus ,-x \*.DS_Store
tut es aber .Die Datei der obersten Ebene eines Zip-Archivs mit mehreren Dateien sollte normalerweise ein einzelnes Verzeichnis sein, da andere nicht archivierende Dienstprogramme (wie
unzip
und7z
, aber nicht das Archivierungsdienstprogramm, The Unarchiverunar
, oder) vorhanden sinddtrx
) kein enthaltendes Verzeichnis für das Verzeichnis erstellen Dateien, wenn das Archiv extrahiert wird, was häufig das Auffinden der Dateien erschwert. Wenn mehrere solcher Archive gleichzeitig extrahiert werden, kann es schwierig sein, festzustellen, welche Dateien zu welchem Archiv gehören.Das Archivierungsdienstprogramm erstellt ein
__MACOSX
Verzeichnis nur, wenn Sie ein Archiv erstellen, in dem mindestens eine Datei Metadaten wie erweiterte Attribute, Dateiflaggen oder einen Ressourcengabel enthält. Das__MACOSX
Verzeichnis enthält AppleDouble-Dateien, deren Dateiname damit beginnt und._
die zum Speichern von OS X-spezifischen Metadaten verwendet werden. Daszip
Befehlszeilenprogramm verwirft Metadaten wie erweiterte Attribute, Dateiflaggen und Ressourcengabeln. Dies bedeutet auch, dass Metadaten wie Tags verloren gehen und Aliase nicht mehr funktionieren, da die Informationen in einer Aliasdatei in einer Ressourcengabel gespeichert sind.Normalerweise können Sie die OS X-spezifischen Metadaten einfach verwerfen, aber um zu sehen, was Metadatendateien enthalten, können Sie sie verwenden
xattr -l
.xattr
Enthält auch Ressourcengabeln und Dateiflaggen, da auf sie über die Schnittstelle für erweiterte Attribute zugegriffen werden kann, obwohl sie nicht als erweiterte Attribute gespeichert sind. Sowohl das Archivierungsdienstprogramm als auch daszip
Befehlszeilenprogramm verwerfen ACLs.quelle
Das kannst du nicht.
Sie können diese unerwünschten Ordner jedoch nach dem Zippen löschen. Die Befehlszeile verwendet
zip
verschiedene Argumente, wobei eines-d
zum Löschen von Inhalten basierend auf einem regulären Ausdruck dient. Sie können es also folgendermaßen verwenden:quelle
komprimiere keine versteckte Datei:
mit dieser Frage sollte es sein wie:
Es muss jedoch gesagt werden, dass der Befehl zip im Terminal ausgeführt wird, indem nur die Datei komprimiert wird, keine anderen komprimiert werden. Tun Sie dies, das Ergebnis ist das gleiche:
quelle
__MACOSX
beginnt nicht mit.
Meinen Sie das
zip
Befehlszeilentool oder den Finder-Komprimierungsbefehl?Für
zip
können Sie die--data-fork
Option ausprobieren . Wenn dies nicht der Fall ist, können Sie es versuchen--no-extra
, obwohl dies andere wertvolle Dateimetadaten wie uid / gid und Dateizeiten zu ignorieren scheint.Für den Komprimierungsbefehl des Finders glaube ich nicht, dass es Optionen gibt, um sein Verhalten zu steuern. Es ist für den einfachen Fall.
Das andere Werkzeug und vielleicht 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 experimentieren mit--norsrc
,--noextattr
,--noqtn
,--noacl
und / oder einfach die wegzulassen--sequesterRsrc
Option (die nach der Manpage kann für das verantwortlich sein__MACOSX
Unterverzeichnis). Obwohl das Fehlen von--sequesterRsrc
einfach bedeutet, das AppleDouble-Format zu verwenden, das überall ._ Dateien anstelle eines__MACOSX
Verzeichnisses erstellen würde .quelle
Ich habe eine bessere Lösung, nachdem ich alle vorhandenen Antworten gelesen habe. Alles kann durch einen Workflow mit einem einzigen Rechtsklick erledigt werden. KEINE zusätzliche Software, KEINE komplizierten Kommandozeilen und KEINE Shell-Tricks.
Der Automator-Workflow:
Schritt 2: Führen Sie den Shell-Befehl mit der Eingabe als Parameter aus. Kopierbefehl unten.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Speichern Sie es und wir sind fertig! Klicken Sie einfach mit der rechten Maustaste auf den Ordner oder einen Großteil der Dateien und wählen Sie den Workflow aus dem Menü "Dienste". Nebenbei wird ein Archiv ohne Metadaten erstellt.
quelle
So vermeide ich das
__MACOSX
Verzeichnis, wenn ich Dateien mit demtar
Befehl komprimiere :$ 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 können Sie loslegen:tar cjvf file.tar.bz2 dir
quelle