• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Frühling ist auch in den eingesandten Fotos deutlich zu erkennen. Zeigt uns, wer Euer Favorit ist! hier geht es lang für Euer Voting --> Klick

Shell-Befehl durch Droplet ausführen

Fenster

Bismarckapfel
Registriert
28.11.07
Beiträge
143
Hallo Leute,

ich habe öfters mal Bilddateien bei denen ich die Exif-Daten ändern muss. Das ganze mache ich bisher übers Terminal mit diesen Befehlen:
Code:
cd Der_Pfad_zum_Ordner_mit_den_Bildern
exiftool -FocalLength='58' -FNumber='1.2' -ApertureValue='1.2' -MaxApertureValue='1.2' -Lens='Minolta MC Rokkor-PG 58mm f/1.2' -LensInfo='58mm f/1.2' -LensID='0' *.CR2 *.jpg
Damit werden die Exif-Einträge für alle CR2- und JPG-Dateien in dem Ordner nach meinen Wünschen geändert.

Nun dachte ich mir, dass man das mit einem Droplet vielleicht vereinfachen könnte und ich somit nicht immer das Terminal starten und den Befehl für exiftool raussuchen müsste. Leider hab ich keine Ahnung von AppleScript oder sonstigen Script-Sprachen und brauche dazu eure Hilfe.

Ich möchte also, dass beim Ablegen einer/mehrerer Dateien oder eines ganzen Ordners auf das Droplet das Script in den enstprechenden Ordner springt, den oben genannten exiftool-Befehl ausführt und die Rückmeldung von exiftool anzeigt. Die Rückmeldung sieht im Terminal ganz einfach aus, falls das eine Rolle spielt (in dem Ordner war eine JPG-Datei und keine CR2-Datei, deshalb der Error):
Code:
Error: File not found - *.CR2
    1 image files updated
    1 files weren't updated due to errors
Mit dem AppleScript-Editor bin ich zumindest soweit gekommen, dass beim Doppelklicken des "Programms" der Befehl im Desktop-Ordner ausgeführt wird. Aber das ist blöd, da ich dafür erst mal alle Dateien auf den Desktop ziehen muss, außerdem ists kein Droplet.

Ich hoffe ihr könnt mir helfen.

Gruß
Fenster
 

toc-rox

Weigelts Zinszahler (Rotfranch)
Registriert
15.11.09
Beiträge
247
Grundsätzlich sollte sich das Vorhaben über ein Droplet realisieren lassen. Werden Datei auf das Droplet gezogen, so können die vollständigen Dateinamen (m.E.) direkt an exiftool übergeben werden. Im Fall von Ordnern wird das Programm umfangreicher, da die Ordner wiederum Unterordner enthalten können, die dann rekursive zu prozessieren wären. Der Programmumfang für die Dateivariante wäre m.E. sehr "übersichtlich" und ließe sich gut von Standardbeispielen ableiten.
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo Fenster,

schau mal ob's funktioniert ...
• Die vom Exiftool erstellten Sicherungsdateien werden nicht gelöscht
• Es findet keine Vorab-Überprüfung der Datei statt (Jpg, ...)
• Ordner und Dateien werden abgearbeitet

Im ScriptEditor öffnen und als Programm sichern ...

Gruß

Hans

Code:
on open these_items
	repeat with i from 1 to the count of these_items
		set this_item to (item i of these_items)
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else
			process_item(this_item)
		end if
	end repeat
	
end open

on process_folder(this_folder)
	set these_items to list folder this_folder without invisibles
	repeat with i from 1 to the count of these_items
		set this_item to alias ((this_folder as text) & (item i of these_items))
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else
			process_item(this_item)
		end if
	end repeat
end process_folder

on process_item(this_item)
	do shell script "exiftool -FocalLength='58' -FNumber='1.2' -ApertureValue='1.2' -MaxApertureValue='1.2' -Lens='Minolta MC Rokkor-PG 58mm f/1.2' -LensInfo='58mm f/1.2' -LensID='0' " & " " & quoted form of POSIX path of this_item
end process_item
 
  • Like
Reaktionen: Fenster

Fenster

Bismarckapfel
Registriert
28.11.07
Beiträge
143
Hallo Hans,

das funktioniert einwandfrei! Habs alle möglichen Szenarien getestet, auch mit Unterordner im Unterordner vom Hauptordner :)
Vielen, vielen Dank!

Gruß
Fenster
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hallo Fenster,

schön :)

Bitte ersetzte noch den letzten Handler im Script:
Code:
on process_item(this_item)
	try
		do shell script "exiftool -FocalLength='58' -FNumber='1.2' -ApertureValue='1.2' -MaxApertureValue='1.2' -Lens='Minolta MC Rokkor-PG 58mm f/1.2' -LensInfo='58mm f/1.2' -LensID='0' " & " " & quoted form of POSIX path of this_item
	on error
		set LogDatei to quoted form of POSIX path of (path to desktop as text) & "ExifError.log"
		do shell script "echo " & quoted form of (this_item as text) & " >> " & LogDatei
		
		
	end try
end process_item

... damit die Bearbeitung bei Fehlern nicht stoppt, sondern die betreffende Datei in einem "ExifError.log" (Desktop) protokolliert wird.

Gruß

Hans
 

Fenster

Bismarckapfel
Registriert
28.11.07
Beiträge
143
Super. Ist es auch möglich vor der Verarbeitung der Daten mit einem kleinen Pop Up nach dem Blendenwert gefragt zu werden (in welchem ich dann z.B. "5.6" eingebe), der dann bei -FNumber='1.2' und -ApertureValue='1.2' anstelle der 1.2 verwendet wird?
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hi,

zwei Fragen:
1.) Sollen die Angaben gespeichert und nur bei Bedarf per Dialog geändert werden?
2.) Sollen eventuell auch direkt Angaben zum Fotografen, oder für Bildserien z.B. Bildbeschreibung, Stichwörter ... abgefragt / eingefügt werden ?

Schönen Abend

Hans
 

Fenster

Bismarckapfel
Registriert
28.11.07
Beiträge
143
Weder noch, eine einfache Abfrage des Blendenwerts bei jedem Start geüngt :)
 

-hans-

Jamba
Registriert
02.09.10
Beiträge
56
Hi Fenster,

dann ist der Code eine Zeile länger ;)
Code:
on open these_items
	repeat with i from 1 to the count of these_items
		set this_item to (item i of these_items)
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else
			process_item(this_item)
		end if
	end repeat
	
end open

on process_folder(this_folder)
	set these_items to list folder this_folder without invisibles
	repeat with i from 1 to the count of these_items
		set this_item to alias ((this_folder as text) & (item i of these_items))
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else
			process_item(this_item)
		end if
	end repeat
end process_folder

on process_item(this_item)
	set Blendenwert to text returned of (display dialog "Bitte  Blendenwert eingeben: 
	(Separation mit Punkt)" default answer "1.2")
	
	try
		do shell script "exiftool -FocalLength='58' -FNumber=" & quoted form of Blendenwert & " -ApertureValue=" & quoted form of Blendenwert & " -MaxApertureValue='1.2' -Lens='Minolta MC Rokkor-PG 58mm f/1.2' -LensInfo='58mm f/1.2' -LensID='0' " & " " & quoted form of POSIX path of this_item
	on error
		set LogDatei to quoted form of POSIX path of (path to desktop as text) & "ExifError.log"
		do shell script "echo " & quoted form of (this_item as text) & " >> " & LogDatei
		
		
	end try
end process_item

cu


Hans