Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
grenzli •-->

Anmeldedatum: 05.02.2010 Beiträge: 39
|
Verfasst am: 09.04.2012 - 21:11 Titel: laaange liste schnell verarbeiten |
|
|
Hallo zusammen,
es geht mal wieder um's Taggen von Bilddateien (diesmal tifs)
und ich habe eine "Datenbank" (text-Datei), deren Inhalt ungefähr so aussieht:
028825_F3420001
033717_S4ACC0016A
299962_T9070010
299973_T9070010
299980_T9070010
305632_T9070006
305633_T9070006
305665_T9070006
312390_F8990004
608849_F7CA0024
619995_S7440004
625326_F6990002
657345_F0SW004A
657346_F0SW004A
es sind ca 2500 Zeilen.
Momentan stehen die Daten in einer Text-Datei. Diese wird am Anfang des Scripts einmal eingelesen, dann jeweils eine Zeile als Liste definiert und wenn der Dateiname dem ersten Item der jeweiligen Liste entspricht, wird das zweite Item der Liste in die Metadaten geschrieben.
Das funktioniert auch soweit so gut.
Bei einer Datei dauert das nicht allzu lang, jetzt hab ich aber mehrere Dateien (mittels on open handler) übergeben und warte und warte und es dauert ca 1 Minute bis eine Datei aktualisiert ist. (Liegt sicherlich an der Länge der Liste bzw, wie ich darauf zugreife)
Die Frage ist jetzt, ob man das lange durchsuchen der Liste verkürzen könnte, in dem man sie anders durchsucht oder anders speichert oder ähnliches?
Hier das aktuelle Script, (hatte auch schon versucht, das Einlesen der Txt außerhalb der ersten Repeatschleife machen zu lassen, half nichts)
________________
on open (some_things)
repeat with datei in some_things
tell application "Finder"
set open_file to "50GB_system:Users:tim:Desktop:art-nr-working-nr.txt" as alias
set myList to every paragraph of (read open_file)
set anzahl to (count of paragraphs of (read open_file))
-- set datei to choose file
set endung to name extension of datei
--display dialog endung
set alias_information to info for datei
set file_name to text 1 thru (-2 - (length of name extension of alias_information)) of name of alias_information
-- display dialog file_name
set artikelnummer to text 1 thru 6 of file_name
--display dialog artikelnummer
repeat with i from 1 to anzahl
set zieh to paragraph i of (read open_file)
set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to "_"
set Farbliste to every text item of zieh
set AppleScript's text item delimiters to oldDelimiters
get Farbliste
if artikelnummer is item 1 of Farbliste then
set workingnumber to item 2 of Farbliste
--display dialog workingnumber
do shell script "exiftool -overwrite_original -IntellectualGenre=" & workingnumber & " " & quoted form of POSIX path of datei
else
tell application "Finder" to set label index of datei to 2
end if
end repeat
end tell
end repeat
end open
Falls jemand bis hier unten gekommen ist: schönen Dank für's Lesen, vielleicht fällt euch ja was ein. |
|
Nach oben |
|
 |
hubionmac •--->


Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 10.04.2012 - 16:03 Titel: |
|
|
via awk vielleicht... man könnte es auch auf einen Versuch mit egrep ankommen lassen. Zudem wird in Deine Skript die Repeat-Schleife nicht beendet, nachdem die passende Artikelnummer gefunden wurde, so durchläuft die Routine für jede Datei grundsätzlich alle 2500 Zeilen.
Anbei eine Lösung mit awk
Code: | on run
enter_exif_info({choose file})
end run
on open these
enter_exif_info(these)
end open
on enter_exif_info(thefiles)
--Pfad zur Text-Datei mit Inhalt Artikelnummer_WorkingNumber
set data_file to quoted form of POSIX path of (((path to "desk") & "art-nr-working-nr.txt" as text) as alias)
repeat with thefile in thefiles
set thefile_unquoted to POSIX path of thefile
set thefile to quoted form of thefile_unquoted
## lese den Dateinamen aus der Pfadangabe aus und daraus die Artikelummer
set artikelnummer to characters 1 through 6 of (do shell script "basename " & thefile) as text
## suche Dir die workingnumber zu der Artikelnummer aus dem Datafile
set workingnumber to do shell script "awk -F _ '/^" & artikelnummer & "/ {print $2}' " & data_file
--display dialog workingnumber
##trage die Workingnumber via exiftool in die Datei ein, sofern es überhaupt eine gibt
if workingnumber as text is not "" then
do shell script "exiftool -overwrite_original -IntellectualGenre=" & workingnumber & " " & thefile
else
##bei einem Fehler die Datei mal rot markieren
tell application "Finder" to set label index of file (POSIX file thefile_unquoted as alias) to 2
end if
end repeat
end enter_exif_info |
_________________ hubionmac.com akzeptiere Paypal und Pizza |
|
Nach oben |
|
 |
grenzli •-->

Anmeldedatum: 05.02.2010 Beiträge: 39
|
Verfasst am: 11.04.2012 - 19:40 Titel: |
|
|
besten dank hier auch nochmal. funktioniert an 10.5 und 10.7 |
|
Nach oben |
|
 |
hubionmac •--->


Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 11.04.2012 - 22:32 Titel: |
|
|
Hat vielleicht jemand ein 10.6 zur Hand und könnte mal den awk-Befehl testen, ob es vielleicht an der Art der Definition des Trennzeichens liegt oder ob awk bei keinem Fund statt eines lehren Strings einen Fehler ausgibt?  _________________ hubionmac.com akzeptiere Paypal und Pizza |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1068
|
Verfasst am: 18.04.2012 - 21:38 Titel: |
|
|
Mal zum Verständnis. In der Textdatei inputliste.txt steht:
Code: | 028825_F3420001
033717_S4ACC0016A
299962_T9070010
299973_T9070010
299980_T9070010
305632_T9070006
305633_T9070006
305665_T9070006
312390_F8990004
608849_F7CA0024
619995_S7440004
625326_F6990002
657345_F0SW004A
657346_F0SW004A
|
Und Du hast verschiedene Biddateien die z.B. heißen:
Code: | 028825.jpg
033717.jpg
299962.jpg
299973.jpg
299980.jpg
305632.jpg
305633.jpg
305665.jpg
312390.jpg
608849.jpg
619995.jpg
625326.jpg
657345.jpg
657346.jpg
|
Und nun soll jede der JPGs einen exifeintrag mit dem Teil hinter dem _ bekommen. Im Prinzip willst Du also haben:
Code: | exiftool -overwrite_original -IntellectualGenre='S4ACC0016A' '033717.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010' '299962.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010' '299973.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010' '299980.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006' '305632.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006' '305633.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006' '305665.jpg'
exiftool -overwrite_original -IntellectualGenre='F8990004' '312390.jpg'
exiftool -overwrite_original -IntellectualGenre='F7CA0024' '608849.jpg'
exiftool -overwrite_original -IntellectualGenre='S7440004' '619995.jpg'
exiftool -overwrite_original -IntellectualGenre='F6990002' '625326.jpg'
exiftool -overwrite_original -IntellectualGenre='F0SW004A' '657345.jpg'
exiftool -overwrite_original -IntellectualGenre='F0SW004A' '657346.jpg'
|
Das würde ich doch mit einem shell script (genretag) lösen:
Code: |
#!/bin/sh
while read line ; do
fname=`echo $line | cut -d_ -f1`
info=`echo $line | cut -d_ -f2`
if [ -e "$fname.jpg" ] ; then
exiftool -overwrite_original -IntellectualGenre="$info" "$fname.jpg"
fi
done
|
Aufgerufen im Terminal mit z.B.:
Code: |
./genretag < inputliste.txt
|
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
hubionmac •--->


Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 18.04.2012 - 21:42 Titel: |
|
|
elender Code-Verbesserer
Ne im Ernst, cooles Beispiel für die Effizienz eines Shell-Scripts im Vergleich zu einer AppleScript-Lösung... Respekt! _________________ hubionmac.com akzeptiere Paypal und Pizza |
|
Nach oben |
|
 |
grenzli •-->

Anmeldedatum: 05.02.2010 Beiträge: 39
|
Verfasst am: 19.04.2012 - 07:45 Titel: |
|
|
Ja genau, Skeeve, komplett richtig verstanden und ich werds dann mal versuchen, mit dem shell script.
und falls ich undankbar wirkte, bin ich nicht, es war nur stressig die letzten tage und deshalb kam ich nicht recht dazu, hier vorbeizuschauen, zumal meine mail-benachrichtigungen bei neuen antworten deaktiviert war, tztztz..
also nochmal danke und ich teste.
grüße |
|
Nach oben |
|
 |
|