Dateiendungen setzen

15 Jul 2011 - 11:06

Immer mal wieder kommt folgende Anfrage vorbei: »Ich hab viele alte RagTime-Dateien, die nicht das richtige Icon im Finder zeigen und bei Doppelklick nicht geöffnet werden.«

Meist ist bei diesen alten Dateien die fehlende Endung ».rtd« schuld.

Ich hab ein kleines AppleScript bei mir auf dem Rechner, dass eine Ordnerhierarchie durchläuft und versucht, korrekte Dateiendungen zu setzen. Dafür schaut es sich den Anfang der Datei an. Viele Dateien haben einen eindeutigen Anfang, er kann deshalb für die Bestimmung des Dateityps verwendet werden.

Das Script versucht, folgende Dateien zu erkennen und die Endung entsprechend zu setzen:

  • RagTime (ab Version 4) -> .rtd
  • PostScript Druckdatei -> .ps
  • Encapsulated PostScript (ohne und mit TIFF-Vorschau) -> .eps
  • Portable Document Format -> .pdf
  • Hypertext Markup Language -> .html
  • Graphics Interchange Format -> .gif
  • Joint Photographic Experts Group -> .jpeg
  • Portable Network Graphics -> .png
  • Tagged Image File Format (Motorola und Intel) -> .tiff

Das Script öffnet einen Dialog zur Ordner-Auswahl und durchläuft dann alle Dokumentdateien in diesem und darunter liegenden Ordnern. Für jede Datei, die das Script erkennt, wird die Endung gesetzt.

Das Verfahren ist nicht 100% sicher, vor allem wegen der beschränkten Art, in der AppleScript Dateien lesen kann (kein Konzept für binäre Dateien). Die Übersetzungsliste steht am Anfang im Script als Properties. Man kann wegwerfen, was einem zu unsicher oder als unwichtig erscheint, oder auch andere »magic byte«-Folgen ergänzen. Einige findet man zum Beispiel auf der Seite File magic numbers von Richard Ogley. Es gibt mehr im Web.

Damit man das Script einigermaßen gut modifizieren kann, hab ich die Teilprobleme in drei Handler zerlegt:

  • folder_scan durchläuft eine Ordnerhierarchie und liefert eine Liste mit Aliasen auf die gefundenen Dokumente ab.
  • find_suffix schaut sich den Anfang einer Datei an und versucht, den Suffix zuzuordnen. Dieser Handler benutzt die Property magic_list. Für die Unterscheidung zwischen PostScript-Druckdateien und EPS-Dateien hat er Sondercode.
  • set_suffix sagt dem Finder, auf was er die Dateiendung setzen soll.

Das Script liegt im Anhang. Wegen nicht druckbarer Sonderzeichen (beim Motorola TIFF) hab ich den Code hier nicht als HTML wiedergegeben.

Ein zweites Script-Programm beschränkt sich auf RagTime-Dateien (Version 4 und neuer). Es dürfte etwas schneller sein und die Erkennung von RagTime-Dateien ist extrem sicher. Es enthält noch eine Zusatzbedingung und ändert die Endung nicht, wenn sie .rtd oder .rtt lautet (RagTime-Formulare). Allerdings können beide Scripts bei einer Datei ohne Endung leider nicht erkennen, ob das Dokument ein RagTime-Formularblock ist oder nicht. Es wird deshalb immer .rtd gesetzt.

Anhang / AttachmentGröße / Size
Dateiendungen_setzen.zip22.34 KB
Dateiendungen_setzen_nur_RagTime.zip22.57 KB