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?
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
Öffnen Sie Automator und wählen Sie Dienst 1 oder Datei > Neu > Dienst aus, wenn Automator bereits geöffnet ist.
Stellen Sie Service empfängt ausgewählt auf Ordner und in Finder ein .
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
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
Es gibt eine integrierte alternative Lösung, wenn Sie Automator nicht verwenden möchten und die Einstellungen des Archive Utility ändern möchten.
/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)
Benutzer3439894
Benutzer3439894
popd
und einen schwerwiegenden Tippfehler in korrigiertfor i in $bn*.zip; do
, der hätte sein sollenfor i in $bn *.zip; do
. Beachten Sie das Leerzeichen zwischen$bn
und*.zip
, es fehlte und hätte nicht sein sollen. Aktualisieren Sie es also bitte in Ihrer Implementierung, sonst tritt es auf,File Name 2.zip
wenn dasbasename
ein Leerzeichen enthält.