AppleScript hilft: einen ganzen Projektordner konvertieren

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

Tags: , , , , ,

Kommentare sind geschlossen.