Batch-Komprimierung mehrerer Ordner in einzelne Zip-Dateien

11

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 mit allen Ordnern, während ich eine Zip-Datei pro Ordner möchte .

Ich habe versucht, mit Automator einen Workflow mit der Aktion "Archiv erstellen" zu erstellen, aber es verhält sich genauso: Wenn Sie mehrere Dateien / Ordner eingeben, wird eine einzelne Zip-Datei ausgegeben. Es gibt keine Möglichkeit anzugeben, dass die Aktion für jedes Element einzeln ausgeführt wird.

Grundsätzlich suche ich nach einer Möglichkeit, um zu vermeiden, dass "Compress" im Finder für jeden einzelnen Ordner einzeln ausgeführt werden muss. Gibt es eine Möglichkeit, dies zu automatisieren?

daGUY
quelle
1
Ich habe meine Antwort aktualisiert, um den Code zu verbessern, der zum Inkrementieren des Dateinamens des Zip-Archivs verwendet wird, damit er emuliert, wie der Befehl Finder-Kontextmenü Compress [n] Items einen Dateinamen inkrementiert.
user3439894
Entschuldigung, ich habe den Code noch einmal aktualisiert, um das Unnötige zu entfernen, popdund einen schwerwiegenden Tippfehler korrigiert for i in $bn*.zip; do, der hätte sein müssen for i in $bn *.zip; do. Beachten Sie den Abstand zwischen $bnund *.zip, er fehlte und hätte nicht sein dürfen. Bitte aktualisieren Sie es in Ihrer Implementierung, andernfalls wird es aktiviert, File Name 2.zipwenn in dem basenameein Leerzeichen vorhanden ist.
user3439894

Antworten:

13

Hier ist ein Automator Service 1 , der im Finder verfügbar wird, wenn Ordner ausgewählt werden, und den Kontextmenü- Befehl Compress [n] Items emuliert, außer dass für jeden ausgewählten Ordner im Namen des ausgewählten Ordners eine individuelle Zip-Archivdatei erstellt wird . Wenn die Datei Folder Name.zip bereits vorhanden ist, wird ein ( Leerzeichen 2) an den Dateinamen angehängt , z . B. Folder Name 2.zip . Dies stellt eine vorhandene Zip-Archivdatei sicher " 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 Unterschiede in der Nomenklatur, die jedoch beim Vergleich mit Mojave Automator-Workflows vor macOS offensichtlicher sein sollten.

So erstellen Sie den Service: 1

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

  2. Set - Dienst empfängt ausgewählt , um Ordner und in zu Finder .

  3. Fügen Sie eine Run Shell Script- Aktion hinzu , indem Sie Shell: to / bin / bash und Pass input: to als Argumente festlegen und den folgenden Code hinzufügen :

    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 mit der rechten Maustaste und wählen Sie unter Dienste die Option Ordner separat komprimieren aus .

Oder nachdem Sie die Zielordner ausgewählt haben , können Sie in der Menüleiste auch auf Finder > Dienste > Ordner separat komprimieren klicken .

Dort haben Sie die Möglichkeit, mehrere Ordner gleichzeitig und gleichzeitig in einzelnen Zip-Archiven zu komprimieren und gleichzeitig zu emulieren, wie Finder eine Zip-Archivdatei erstellt. Bedeutung des Zip - Archivs enthält konserviert Resource Forks und HFS Meta-Daten im Unterverzeichnis __MACOSX und bettet nur die übergeordneten Verzeichnisname Quelle in Ziel-Archiv , nicht der vollständigen Pfadname wie bei der Verwendung von zip(ohne -j) , das Archiv zu erstellen.

Bild von Ordnern separat komprimieren

Ordner separat komprimieren - Automator Service

user3439894
quelle
Ich habe sowohl Ihre Lösung als auch die von @ ababak überprüft. Sie liefern genau das gleiche Ergebnis und Ababaks ist viel einfacher zu implementieren. Ich habe sowieso beide gewählt.
Turzifer
15

Es gibt eine alternative Lösung, die integriert ist, wenn Sie Automator nicht verwenden möchten und die Einstellungen des Archivierungsdienstprogramms problemlos ändern können.

  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 "Archiv komprimieren".
  4. Ziehen Sie die Ordner per Drag & Drop in das Symbol im Dock.
ababak
quelle
Das Schöne an dieser Option ist, dass Sie die Einstellungen für Archive Utility.app festlegen können, um das Original nach Abschluss in den Papierkorb zu verschieben. Es ist nicht auf Ordner beschränkt. Gibt es eine Möglichkeit, einen Automator-Dienst so einzurichten, dass er mit Archive Utility.app als Dienst geöffnet wird, wenn Sie als Option mit der rechten Maustaste klicken möchten? Ich bin auf eine Einschränkung gestoßen, da Archive Utility.app nicht mit der Aktion Anwendung starten ausgewählt werden kann.
Thepen
@thepen, natürlich können Sie das Archivierungsdienstprogramm als Aktion zum Starten der Anwendung auswählen. Sie müssen nur "Andere ..." auswählen und zu seiner Position navigieren /System/Library/CoreServices/Applications/(Sie können Cmd-Shift-G drücken, wenn der Dateiauswahldialog geöffnet ist, um diesen Pfad für die schnelle Navigation
einzufügen
Was ist der Unterschied zwischen "Archivformat" und "Zip-Archiv"?
user1993
Diese Methode ist ein viel einfacherer Arbeitsablauf. Ich habe den Befehl ausprobiert: für item in *; zip "$ {item} .zip" "$ {item}"; im Terminal gemacht, aber es hat nicht richtig funktioniert. Unbekannt warum, aber ich wollte mir nicht die Zeit nehmen, es herauszufinden. Das hat gut funktioniert.
ArchonOSX