Hallo Scripter,
entzippen per AppleScript?!? Was für eine doofe Idee! Das geht doch
ganz einfach mit einem Doppelklick!
Stimmt. Aber es gibt Workflows, in welchen man das Dekomprimieren
automatisch erledigen möchte.
Zum Beispiel wenn eine Mail-Message eintrifft, deren Inhalt sagt, dass eine Datei hochgeladen wurde.
Eine Mail-Rule kann daraufhin ein AppleScript starten, welches die ZIP-Datei verschiebt, entzippt und den Ordner in einen bestimmten Ordner verschiebt.
Dann wird der Verantwortliche per Mail informiert, dass das Entzippen und Verschieben geklappt hat. Zusätzlich wird das Ergebnis in eine Logdatei geschrieben.
*****
Für die erste Version benutzte ich
unzip mit 'do shell script':
Das Entzippen funktioniert. Aber nicht ganz zufriedenstellend:
1. Zusätzlich wird ein Ordner namens "__MACOSX" erzeugt. Dieser kann mit einem Scriptbefehl entfernt werden.
2. Doch ein echtes Problem ist die Tatsache, dass der Inhalt von älteren Schriftdateien (z.B. vom 'Type 1') gelöscht wird.
*****
Auf eine Anregung des Kunden hin, versuchte ich es mit dem Programm
Archive Utility. Dieses Dienstprogramm ist auf jedem Mac installiert und wirkt im Hintergrund, wenn Dateien per Menü-Befehl komprimiert werden. Und es agiert auch umgekehrt, wenn ein Doppelklick auf eine Zip-Datei gemacht wird.
Die letztere Aktion kann auch per AppleScript ausgelöst werden, obwohl "Archive Utility" eigentlich nicht scriptbar ist. Dennoch reagiert es auf 'open' (und auf 'quit'):
Das ist schon alles. Weil das Programm offen bleibt, sollte es abschliessend beendet werden (dritte Zeile).
Aber Achtung: Okay, die beiden oben aufgeführten Probleme existieren nicht mehr. Doch es gibt ein neues ... Während man mit dem do-script-Befehl den Namen des entpackten Ordners (oder der Datei) zurückbekommt, ist das Ergebnis des Archive-Utility-Befehls ein unbrauchbares
missing value ...
Wenn das entpackte Objekt nicht verschoben werden muss, ist das kein Problem. Aber sonst muss man den Namen erfahren können. Es reicht nicht, diesen zu "erraten", weil die Zip-Datei möglicherweise umbenannt wurde.
Die Lösung: Vor dem Entzippen eine Liste der Namen aller Objekte im selben Ordner erstellen. Und nach der Aktion erneut. Dann eine Schleife durch die Namen der zweiten Liste. Bei jedem prüfen, ob er in der ersten Liste enthalten ist. Falls nicht, ist es jener des entzippten Objekts und die Schleife kann verlassen werden.
*****
Angehängt an diesen Beitrag ist das Droplet "Entzippen_01.app". Zum Gebrauch: Eine Zip-Datei (oder mehrere) auf das Icon des Droplets ziehen.
Gruss, Hans