Manchmal gibt es stupide Aufgaben, wo eine simple immer wieder gleiche Tätigkeit vielfach an unterschiedlichen Stellen ausgeführt werden muss.
Zum Beispiel die Konvertierung der Dateicodierung eines kompletten Projektordners mit hunderten von Dateien in zig Unterordnern. Diese Konvertierung war im vorliegenden Fall erforderlich, weil PHP u. U. allergisch auf UTF-8 codierte Script-Dateien reagiert, wenn diese eine Byte-Order-Mark Kennzeichnung (BOM) enthalten. Somit stellte sich die Aufgabe, mit Hilfe eines Texteditors in über 700 Programmdateien eines Projekts die eingestellte Zeichensatz-Codierung zu ändern – was per Hand mehrere Stunden Arbeit bedeutete…
Sofern sich die auszuführende Aktion scripten lässt, kann man jedoch mit einer einfachen AppleScript-Schleife eine komplette Ordner-Hierarchie rekursiv durchlaufen und die Aktion dann immer wieder in gleicher Weise auf alle enthaltenen Dateien anwenden.
War es in früheren Zeiten noch erforderlich, umständliche Routinen für das rekursive Durchlaufen eines Verzeichnisbaums zu programmieren, so gibt es inzwischen ein einfaches Finder-Kommando, welches einem den kompletten Verzeichnisbaum mit allen enthaltenen Objekten direkt zurückliefert:
tell application "Finder"
set theList to entire contents of theFolder as alias list
end tell
Mit Hilfe diese Konstrukts lässt sich die eingangs beschriebene Aufgabe unter Zuhilfenahme des Texteditors BBEdit mit ein paar kurzen Zeilen AppleScript wiefolgt lösen:
tell application "Finder"
set theFolder to choose folder
set theList to entire contents of theFolder as alias list
repeat with thisItem in theList
if kind of thisItem is not "Ordner" and file type of thisItem is "TEXT" then
tell application "BBEdit"
activate
open thisItem
set myprops to properties of text document 1
if encoding of myprops is "Unicode (UTF-8)" then
set properties of text document 1 to {encoding:"Unicode (UTF-8, no BOM)"}
save text document 1
end if
close text document 1
end tell
end if
end repeat
end tell
Die eingesparte Zeit ließ sich nun prima nutzen, um diesen Tipp hier als Blogeintrag zu verewigen
externe Links
- Tipp: AppleScript – rekursiver Ordnerinhalt
- Texteditor: BBEdit
- Probleme mit UTF-8 codierten PHP-Dateien “headers already sent”
- Umstellung von WEB-Projekten auf UTF-8
- Wikipedia: Byte Order Mark (BOM)
Tags: AppleScript, Automatisierung, BBEdit, OSX, PHP, UTF-8