rootinch
Goto Top

Script unter MAC OS X?

Selam,

Seit kurzem habe ich mit MAC´s zu tun, stürze mich auch ganz fleissig hinein, habe aber dennoch ein paar Probs, bei denen mir vielleicht jemand helfen mag.

Ich möchte über SIPS im Terminal folgendes starten: "sips -s format tiff *.jpg --out /Pfad/zum/Zielverzeichnis" und zwar im Sinne eine dauernden Überwachung des Ordners.

Beim PC hätte ich jetzt eine Batch geschrieben und das ganze über den Taskplaner alle paar Minuten anlaufen lassen, aber wie funktioniert das beim MAC???

Content-Key: 37102

Url: https://administrator.de/contentid/37102

Printed on: April 19, 2024 at 01:04 o'clock

Member: JohnnyB
JohnnyB Aug 01, 2006 at 17:35:41 (UTC)
Goto Top
Automatische Ausführung von Scripten funktioniert unter Mac OS X entweder Linux/Unix-typisch mit Hilfe des cron-Dämons oder mittels launchd. Da der launchd sowieso immer läuft, weil er schon für den Start des OS verantwortlich ist und der cron-Deamon erst entsprechend konfiguriert werden muß, empfehle ich dir das mit launchd zu machen.
Member: RobertTischler
RobertTischler Aug 01, 2006 at 20:17:39 (UTC)
Goto Top
Hallo

Ich kann dir zwar zu deinem Script nicht´s sagen aber ich kann dir mal Empfehlen dir Automator anzusehen. Damit kann man aus vorgefertigen Bausteine eigene Aktionen zusammen bauen. Hab damit schon ein paar Sachen gemacht. Ist erst mal etwas komisch so Aktionen zu erstellen aber wenn man es erst mal versanden hat wie alles geht ist es ganz einfach.

MFG
Member: JohnnyB
JohnnyB Aug 01, 2006 at 22:33:32 (UTC)
Goto Top
Hier mal das Script:

#!/bin/bash

# damit auf jedenfall eine JPEG-Datei im Verzeichnis ist
screencapture -x -tjpeg /Pfad/zum/jpegbilerordner/dummy.jpg

# die Textausgaben und Fehlermeldungen von sips mit > und >& ins Datennirvana schicken
sips -s format tiff /Pfad/zum/jpegbilderordner/*.jpg --out /Pfad/zum/tiffbilderordner > /dev/null >& /dev/null

# loeschen der jpg-files
rm /Pfad/zum/jpegbilderordner/*.jpg > /dev/null >& /dev/null

Gut es gibt sicherlich eine elegante Möglichkeit, zu prüfen, ob überhaupt JPEG-Files im Ordner sind, aber so geht es auch.
Anschließend muß das skript ausführbar gemacht werden (ich hab das Skript mal convert.sh getauft):

chmod +x convert.sh

verändert werden soll es auch nicht mehr, also:

chmod -w convert.sh

Ich hab das Skript dann in /bin gespeichert, da der launchd im user-Verzeichnis immer permisson denied bekommen hat.
Soviel dazu.

Als nächstes brauchst Du ein Verzeichnis ~/Library/LaunchAgents
Falls es das noch nicht gibt -> erstellen.

Dann öffnest Du den Property List Editor, der findet sich unter
/Developer/Applications/Utilities

Sollte der nicht da sein, dann mußt du von deiner OS X - CD die xcode-tools installieren.

Im Property List Editor klickst Du auf die Schaltfläche "New Root", die ändert daraufhin ihre Bezeichnung auf "New Sibling" und bleibt deaktiviert.
Dann auf das kleine Dreieck vor Root -> Die Schaltfläche heißt nun "New Child" und kann angeklickt werden. Dies bitte machen.
In das Kästchen "New Item" schreibst Du jetzt

Label

Dann Doppelklick in der selben zeile unter Value. In dieses Kästchen schreibst du den Namen deines LaunchAgents. Apple empfielt hier, wie auch bei allen anderen Propery-Listen, das Konzept der umgekehrten Domain-Namen. z.B.

org.rootnich.convert

Danach wieder die Root-zeile anklicken (aber nicht auf das Dreieck) und Schaltfläche New Child
Jetzt bei New Item eingeben

ProgramArguments

Nicht vertippen, sonst kommt später die Fehlermeldung "org.rootnich.convert: invalid argument"
Bei Class klickst du einfach auf das String und wählst Array. Vor ProgramArguments befindet sich jetzt auch ein Dreieck. Das Anklicken und dann wieder "New Child".
Die Zahl wird automatisch vergeben und läßt sich auch nicht ändern. Das String lassen wir stehen und in das Feld unter Value schreiben wir

convert.sh

Da sich diese Datei ja in /bin befindet ist es nicht notwendig den ganzen Pfad anzugeben, da /bin meistens als erstes im PATH eingetragen ist.
Jetzt wieder die Root-Zeile markieren und Schaltfläche "New Child". Bei New Item jetzt eingeben

StartInterval

(mit großem S und großem I) daraufhin rutscht die Zeile nach unten. String wird geändert (durch anklicken und auswählen) in Number und unter Value kannst du dann angeben alle wieviel Sekunden das Skript ausgeführt werden soll. z.B. 60 wenn es einmal in der Minute sein soll.

So fast fertig. Jetzt speicherst du das (File -> Save oder Apfel S) und benennst es meinetwegen

jpg2tiff.xml

und gibst als Ordner ~/Library/LaunchAgents an, sollte er dir das nicht anbieten dann speicherst du das File eben auf dem Desktop und verschiebst es nachher im Finder oder im Terminal in den o.g. Ordner. Der Ordner wird beim Anmelden automatisch vom launchd durchsucht und alle dort abgelegten LaunchAgents werden gestartet. Beim Speichern darauf achten, daß das File Format auf "XML Property List File" steht.

BEVOR DU IM NÄCHSTEN SCHRITT DEN AGENT STARTEST, ERST EINE SICHERHEITSKOPIE DES JPEG-ORDNERS ERSTELLEN!!!! (es kann schließlich immer mal irgendwas schiefgehen).

So jetzt machst Du ein Terminal auf und startest den Agent manuell mit

launchctl load ~/Library/LaunchAgents/jpg2tiff.xml

Feddich. Wenn Du dich abmeldest, wird der Agent beendet und wenn du dich anmeldest, dann wird er gestartet.

Solltest Du, aus welchen gründen auch immer, keinen Property List Editor haben, so ist das auch nicht soooo schlimm, denn das File, also die Property List, die er erzeugt, ist ein stinknormales XML-File, welches im obigen Falle folgendermaßen aussieht:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>
	<key>Label</key>
	<string>org.rootnich.convert</string>
	<key>ProgramArguments</key>
	<array>
		<string>convert.sh</string>
	</array>
	<key>StartInterval</key>
	<integer>60</integer>
</dict>
</plist>

Bei mir hat es nach der beschriebenen Methode funktioniert. Wenn du zwei Finder-Fenster aufmachst, eines mit dem JPEG-Ordner und eines mit dem TIFF-Ordner, dann kannst Du das ganze ja live verfolgen.
Member: rootinch
rootinch Aug 02, 2006 at 07:10:35 (UTC)
Goto Top
Many, Many THX!