Batch-Komprimierung mehrerer Ordner in einzelne Zip-Dateien

Ich habe Dutzende von Ordnern, die ich in einzelne ZIP-Dateien komprimieren muss.

Wenn ich alle diese Ordner im Finder auswähle und "[X] Elemente komprimieren" ausführe, erhalte ich eine Zip-Datei, die alle Ordner enthält, während ich eine Zip-Datei pro Ordner haben möchte.

Ich habe versucht, einen Workflow mit Automator mit der Aktion „Archiv erstellen“ zu erstellen, aber es verhält sich genauso: Die Eingabe mehrerer Dateien/Ordner gibt eine einzelne ZIP-Datei aus. Es gibt keine Möglichkeit festzulegen, dass die Aktion für jedes Element einzeln ausgeführt wird.

Grundsätzlich suche ich nach einer Möglichkeit, um zu vermeiden, "Komprimieren" im Finder mühsam für jeden einzelnen Ordner einzeln ausführen zu müssen. Gibt es eine Möglichkeit, dies zu automatisieren?

Ich habe meine Antwort aktualisiert, um den Code zu verbessern, der zum Erhöhen des Dateinamens des ZIP-Archivs verwendet wird, sodass er emuliert, wie der Befehl Compress [n] Items im Finder-Kontextmenü einen Dateinamen erhöht.
Entschuldigung, ich habe den Code noch einmal aktualisiert, um das Unnötige zu entfernen, popdund einen schwerwiegenden Tippfehler in korrigiert for i in $bn*.zip; do, der hätte sein sollen for i in $bn *.zip; do. Beachten Sie das Leerzeichen zwischen $bnund *.zip, es fehlte und hätte nicht sein sollen. Aktualisieren Sie es also bitte in Ihrer Implementierung, sonst tritt es auf, File Name 2.zipwenn das basenameein Leerzeichen enthält.

Antworten (2)

Hier ist ein Automator-Dienst 1 , der im Finder verfügbar wird, wenn Ordner ausgewählt werden, und den Kontextmenübefehl Compress [n] Items emuliert , außer dass er eine einzelne ZIP-Archivdatei für jeden ausgewählten Ordner im Namen des ausgewählten Ordners erstellt . Wenn die Datei Ordnername.zip bereits existiert, wird ein ( Leerzeichen 2) an den Dateinamen angehängt , zB Ordnername 2.zip . Dadurch wird eine vorhandene Zip-Archivdatei sichergestellt " 2"wird nicht berührt und der Dateiname des ZIP-Archivs wird bei Bedarf automatisch erhöht.

1 In macOS Mojave und höher wird ein Automator - Dienst als Schnellaktion bezeichnet . Es gibt auch andere geringfügige Nomenklaturunterschiede, die jedoch beim Vergleich mit Arbeitsabläufen vor macOS Mojave Automator offensichtlicher sein sollten.

So erstellen Sie den Dienst: 1

  1. Öffnen Sie Automator und wählen Sie Dienst 1 oder Datei > Neu > Dienst aus, wenn Automator bereits geöffnet ist.

  2. Stellen Sie Service empfängt ausgewählt auf Ordner und in Finder ein .

  3. Fügen Sie eine Run Shell Script Action hinzu , setzen Sie Shell: auf /bin/bash und Pass input: to als Argumente und fügen Sie den folgenden Code hinzu :

    for f in "$@"; do
    
        dn="$(dirname "$f")"
        bn="$(basename "$f")"
    
        cd "$dn" || exit
    
        if [[ ! -e "$bn.zip" ]]; then
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip"
        else
            n=2
            for i in $bn *.zip; do
                if [[ "$bn $n.zip" == "$i" ]]; then
                    n="$(( n + 1 ))"
                fi
            done
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip"
        fi
    
    done
    
    afplay /System/Library/Sounds/Purr.aiff
    
  4. Speichern Sie den Dienst als: Ordner separat komprimieren

So nutzen Sie den Dienst:

Wählen Sie im Finder oder auf dem Desktop mehrere Ordner aus, klicken Sie dann mit der rechten Maustaste und wählen Sie Ordner getrennt komprimieren unter Dienste aus .

Sie können auch nach Auswahl der Zielordner in der Menüleiste auf Finder > Dienste > Ordner separat komprimieren klicken .

Da haben Sie es, eine Möglichkeit, mehrere Ordner separat und gleichzeitig gleichzeitig in einzelnen Zip-Archiven zu komprimieren und dabei zu emulieren, wie Finder eine Zip-Archivdatei erstellt. Das bedeutet, dass das ZIP-Archiv erhaltene Ressourcenzweige und HFS-Metadaten im Unterverzeichnis __MACOSX enthält und nur den übergeordneten Verzeichnisnamen source in destination-archive einbettet , nicht den vollständig qualifizierten Pfadnamen, wie wenn zip(ohne -j) zum Erstellen des Archivs verwendet wird.

Bild von Ordnern separat komprimieren

Ordner separat komprimieren - Automator-Dienst

Ich habe sowohl Ihre Lösung als auch die von @ababak überprüft. Sie liefern genau das gleiche Ergebnis und Ababak ist viel einfacher zu implementieren. Ich habe sowieso beide hochgestimmt.

Es gibt eine integrierte alternative Lösung, wenn Sie Automator nicht verwenden möchten und die Einstellungen des Archive Utility ändern möchten.

  1. Öffnen Sie die Archive Utility.app unter /System/Library/CoreServices/Applications/
  2. Gehen Sie zu Datei > Einstellungen
  3. Ändern Sie die Einstellung "Archivformat verwenden" in "Zip-Archiv".
  4. Ziehen Sie die Ordner per Drag & Drop auf ihr Symbol im Dock.
Das Schöne an dieser Option ist, dass Sie die Archive Utility.app-Einstellungen so einstellen können, dass das Original nach Abschluss in den Papierkorb verschoben wird. Es ist nicht auf Ordner beschränkt. Gibt es eine Möglichkeit, einen Automator-Dienst einzurichten, der mit Archive Utility.app als Dienst geöffnet wird, wenn Sie als Option einen Rechtsklick wünschen? Ich bin auf eine Einschränkung gestoßen, da Archive Utility.app nicht mit der Aktion „Anwendung starten“ ausgewählt werden kann.
@thepen, natürlich können Sie Archive Utility als Aktion zum Starten der Anwendung auswählen. Sie müssen nur "Andere ..." auswählen und zu seinem Speicherort navigieren, der ist /System/Library/CoreServices/Applications/(Sie können Cmd-Shift-G drücken, wenn der Dateiauswahldialog geöffnet ist, um diesen Pfad für eine schnelle Navigation einzufügen)
Was ist der Unterschied zwischen "Archivformat" und "Zip-Archiv"?
Diese Methode ist ein viel einfacherer Arbeitsablauf. Ich habe den Befehl ausprobiert: for item in *; do zip "${item}.zip" "${item}"; im Terminal gemacht, aber es hat nicht richtig funktioniert. Ich weiß nicht warum, aber ich wollte mir nicht die Zeit nehmen, es herauszufinden. Das hat gut funktioniert.
Ich habe dies erfolgreich verwendet, um EPUB-Pakete zu komprimieren, bevor ich sie in eine Calibre-Bibliothek einfüge. Die Automator-Methode ist zwar hervorragend, sieht sie jedoch nicht als Ordner, sondern immer noch als Pakete.