[Skript] Ziel: Dateiliste mit Dateiname + EXIF-Title

Akschel

Neues Mitglied
Thread Starter
Dabei seit
15.06.2011
Beiträge
7
Reaktionspunkte
0
Hallo.

Ich möchte mir auf meinem MacOSX ein kleines Programm erstellen, das mir den Inhalt eines Bilderordners (jpg-Dateien) schön Übersichtlich in eine Text-Datei schreiben soll.

In der Textdatei sollen später zwei informationen je Zeile stehen:
1.) Bildname 2.) Der Bildtitel (ausgelesen aus den EXIF-Infos):

AxelP_110214_2652.jpg "Sex after Death", V8 (fb 7b+) - Hueco Tanks
AxelP_110218_2872.jpg "Revenge of the Choirboys", V9 (fb 7c) - Hueco Tanks
AxelP_110218_2876.jpg "Revenge of the Choirboys", V9 (fb 7c) - Hueco Tanks


Mein Ansatz bisher:
Code:
mdls -name kMDItemDisplayName -name kMDItemTitle AxelP_110214_2652.jpg

So bekomme ich in der Konsole den Dateinamen und den Titel eines bestimmten Bildes angezeigt.
kMDItemDisplayName = "AxelP_110214_2652.jpg"
kMDItemTitle = ""Sex after Death", V8 (fb 7b+) - Hueco Tanks"

Nun zwei Fragen:
1.) Wie bekomme ich die beiden gewünschten Informationen ohne vorhergehende Erklärung ("kMDItem Display Name = " , "kMDItemTitle = ") und in der selben Zeile nebeneinander dargestellt?
2.) Wie wende ich meinen Ansatz auf das komplette Verzeichnis mit vielen jpg-Dateien an? Aktuell bekomme ich die Info ja natürlich nur für eine einzelne Datei.
 
z. B.
find ./ -name "*.jpg" -exec echo `mdls -raw -name kMDItemDisplayName {}` `mdls -raw -name kMDItemTile {}` \; >dateien.txt

das könnte klappen.

Grüsse

kg
 
Danke für den Tipp, aber irgendetwas klappt da immer noch nicht ganz :-/
mdls spuckt leider nur eine Fehlermeldung aus:

find /Users/axelperschmann/Desktop/Test -name "*.jpg" -exec echo `mdls -name kMDItemTitle -raw {}` \;
mdls: could not find /Users/axelperschmann/Desktop/Test/AxelP_110616_4688.jpg.
mdls: could not find /Users/axelperschmann/Desktop/Test/AxelP_110616_4689.jpg.
mdls: could not find /Users/axelperschmann/Desktop/Test/AxelP_110616_4691.jpg.
mdls: could not find /Users/axelperschmann/Desktop/Test/AxelP_110616_4692.jpg.

wenn ich mdls manuell ausführe mit
mdls -name kMDItemTitle -raw /Users/axelperschmann/Desktop/Test/AxelP_110616_4688.jpg
komme ich allerdings auf ein korrektes Ergebnis :-/
 
okay, ich seh schon, der Teufel steckt im Detail.

mach ein kleines Skript
also z. B. mit vi oder nano

also z. B. nano meinskript.sh

#!/bin/bash
EINS=`mdls -raw -name kMDItemTitle $1`
ZWEI=`mdls -raw -name kMDItemDisplayName $1`
echo $EINS $ZWEI

$1 wird den Dateinamen enthalten, also den String den find per Platzhalter {} übergibt.
Dabei gibts ein Problem: Leerzeichen in Dateinamen oder Verzeichnisnamen führen garantiert zum nicht-funktionieren, da der String dann als mind. 2 übergebene Argumente behandelt wird. Das könnte man umgehen, indem man z. B im Skript noch sowas wie

DATEI=$1$2$3

am Anfang einfügt, bzw. das gleich per Schleife macht oder quotet. Ist mir aber jetzt a bisserl zu kompliziert, Mittagessen ruft bald ;-) Ich möchte damit eigentlich nur sagen, dass Leerzeichen in Dateinamen oder Verzeichnissen eine nicht unbedingt gute Angewohnheit sind (keine Kritik, man kann mit allem umgehen, macht die Sache aber halt u. U. recht nervig).

nach dem speichern musst Du das noch ausführbar machen (muss nur einmal gemacht werden):
chmod +x meinskript.sh

dann mit find:
find ./ -name "*.jpg" -exec /pfad/zu/meinskript.sh {} \; >dateien.txt

Servus

kg
 
Hallo nochmal,

ich hab nun noch etwas weiter herumgetüftelt und alles wie gewünscht zum laufen gebracht.
Hier mein verwendeter Befehl:

find ./ -name "*.jpg" -exec mdls -name kMDItemDisplayName -raw {} \; -and -exec printf "\t" \; -and -exec mdls -name kMDItemTitle -raw {} \; -and -exec printf "\t" \; -and -exec mdls -name kMDItemDescription -raw {} \; -and -exec echo "" \;
 
Zurück
Oben Unten