[GastForen Programmierung/Entwicklung AppleScript AppleScript und Spotlight...

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 02:01
Beitrag # 1 von 14
Bewertung:
(4438 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter!
Hat hier schon irgendwer was über das Scripten von Spotlight unter Tiger gefunden?

Normales "Find" bringt nur ein leeres Spotlight-Fenster, unabhängig vom Suchtext

Immerhin geht das hier:

tell application "Finder"
 return do shell script "mdfind \"kMDItemFSName == BS29004.jpg\""
end tell

Aber ich finde verdammich nix wie man die Suche auf bestimmte Orte eingrenzt. (zum Beispiel eine eben eingelegte CD)

Jeder Rat heiss erwartet!

gruss, demski
X

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2005, 08:42
Beitrag # 2 von 14
Beitrag ID: #419688
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

ich habe mal das Dienstprogramm "Terminal" gestartet und man mdfind eingetippt.
Auf Return kommt der Handbucheintrag für 'mdfind'. Unter den drei Optionen
befindet sich auch
---
-onlyin dir
Limit the scope of the search to the directory specified.
---
Versuch's mal damit.

Gruss, Hans


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 10:05
Beitrag # 3 von 14
Beitrag ID: #419689
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Hans!
Das Du wieder mal auf so eine gute Idee kommen kannst!
Hätte mir ja auch mal selber einfallen können!

danke!

gruetzi, demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 11:05
Beitrag # 4 von 14
Beitrag ID: #419690
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, das hat ja nun schon mal geholfen, aber nun habe ich den endgültigen Knoten im Hirn:
Zunächst mal kurz, worum es geht:
Ich habe einen GROSSEN Stapel Stock-Photo-CDs, darauf sind wie man weiss viele viele Bilder. Von denen brauche ich nur ca. 100, deren Bildnamen ich aus einer Indesign-Datei bekomme. Nun geht es darum, nacheinander CD für CD abzusuchen, um die benötigten Bilder in der Fein-Auflösung zu bekommen.
bis zu dem Such-Programm läuft alles, allein das bewegen der gefundenen Bilder an einen neuen Ort macht mir grosse Schwierigkeiten!
Hier mal der Code bis hierhin:

tell application "InDesign CS"
 set Bild to ""
 set skal to 0
 set Proto to ""
 set tabb to " "
 set suche to {}
 set oldDelimiters to AppleScript's text item delimiters
 set AppleScript's text item delimiters to ":"
 
 tell document "Poster.indd"
 
 
  set ThePages to count of pages
 
  repeat with ThePage from 9 to 9 --ThePages
   set myItem to rectangle 1 of page ThePage
   tell myItem
    set geometric bounds to {40, 40, 800, 554}
    fit proportionally given proportionally
    fit given center content
    set BildPfad to file path of item link of all graphics as string
    set NamenListe to every text item of BildPfad
    set Bild to last text item of NamenListe
    set skal to horizontal scale of all graphics
    set suche to suche & Bild
    set Proto to Proto & Bild
    set Proto to Proto & tabb
    set Proto to Proto & skal
    set Proto to Proto & return
   
    --set Bedeutung to properties of Inhalt
   end tell
  end repeat
  --get properties of page item 1
 
  --set TransTxt to open for access ("Macintosh HD:Users:demski:Documents:Bericht.txt" as string) with write permission
  --set eof of TransTxt to 0
  --write Proto to TransTxt
  --close access file ("Macintosh HD:Users:demski:Documents:Bericht.txt" as string)
 
 
 end tell
end tell
set gefunden to ""


tell application "Finder"
 repeat with cds from 1 to 29
  set AppleScript's text item delimiters to "/"
  set cdName to {}
  set durchsuchen to (choose folder)
  set Unixx to POSIX path of durchsuchen
  set cdName to every text item of Unixx
  set durchsuche to text item ((count of text items of cdName) - 1) of cdName
  repeat with i from 1 to count of text items of suche
   set gefunden to do shell script "mdfind -onlyin /Volumes/" & durchsuche & "/ \"kMDItemFSName == " & text item i of suche & " && kMDItemFSSize > 300000\""
   set AppleScript's text item delimiters to return
   
   repeat with varis from 1 to count of text items of gefunden
    duplicate (text item varis of gefunden) to "Macintosh HD:Users:demski:Documents:ASPECTA:" & varis & "_" & text item varis of gefunden
   end repeat
   
  end repeat
 end repeat
end tell
set AppleScript's text item delimiters to oldDelimiters

Und dazu die letzte Event-Protokoll-Meldung:

tell application "InDesign CS"
 count every page of document "Poster.indd"
  85
 get rectangle 1 of page 9 of document "Poster.indd"
  rectangle id 785 of page id 644 of spread id 144 of document "Poster.indd"
 set geometric bounds of rectangle id 785 of page id 644 of spread id 144 of document "Poster.indd" to {40, 40, 800, 554}
 fit proportionally given proportionally
 fit rectangle id 785 of page id 644 of spread id 144 of document "Poster.indd" given center content
 get file path of item link of all graphics of rectangle id 785 of page id 644 of spread id 144 of document "Poster.indd"
  file "voldaten02:Aspecta Versicherung:777-195-05-05 150 Drucke:unsere Version:BS29004.jpg"
 get horizontal scale of all graphics of rectangle id 785 of page id 644 of spread id 144 of document "Poster.indd"
  323.061612863802
end tell
tell application "Finder"
 choose folder
  alias "BS29:"
 do shell script "mdfind -onlyin /Volumes/BS29/ \"kMDItemFSName == BS29004.jpg && kMDItemFSSize > 300000\""
  "/Volumes/BS29/PHOTOS/10MB/BS29004.JPG
/Volumes/BS29/PHOTOS/28MB/BS29004.JPG"
  "„Finder“ hat einen Fehler erhalten: „\"Macintosh HD:Users:demski:Documents:ASPECTA:1_/Volumes/BS29/PHOTOS/10MB/BS29004.JPG\"“ kann nicht als „text item 1 of \"/Volumes/BS29/PHOTOS/10MB/BS29004.JPG
/Volumes/BS29/PHOTOS/28MB/BS29004.JPG\"“ gesetzt werden."

Himmel hilf!

gruusss, demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2005, 15:47
Beitrag # 5 von 14
Beitrag ID: #419691
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

leider werde ich erst heute Abend Zeit haben, um mich Deines sehr komplexen Problems anzunehmen.

Was ich aber so beim Durchlesen des Codes sehe: Der Finder kann mit den Unix-Pfaden nichts anfangen.
Zudem muss nur der Pfad zum Zielordner angegeben werden. Der Ursprungspfad der Datei darf nicht
daran angehängt werden.

Wie, bitte, lautet der Pfad des Zielordners?

Gruss, Hans


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 15:56
Beitrag # 6 von 14
Beitrag ID: #419692
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ahh, Hans,
keine Sorge, das mit heute ist OK!
Mittlerweile läuft das Script fast!
Die Kopier-Geschichte habe ich auch über shell-script gelöst. Geht wunderbar!
Mein Problem ist jetzt glaube ich ein etwas anderes:
Einige Suchnamen werden nicht mehr richtig geschrieben. Das heisst, die Dateien werden auch nicht gefunden.
Ich vermute, das liegt daran, dass ich irgendwann mal gewaltsam gestoppt habe. Seitdem sind die text item delimiters nicht mehr "in Reihe" soll heissen, wenn ich nach dem Abbruch neu starte, wird ganz am Anfang "OldDelimiters" der letzte Wert und nicht der Standard zugewiesen.
Kannst Du mir vielleicht sagen, was das Standard-Trennzeichen eigentlich ist? Ich würde das gerne mal resetten!
Ich finde nirgends Info darüber!

Ich glaube, das würde schn helfen, da das Script jetzt sonst eigentlich läuft!

danke vielmals,

demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2005, 16:10
Beitrag # 7 von 14
Beitrag ID: #419693
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

nun das Standard-Trennzeichen ist ... keines. Das heisst, es ist ein leerer String.
Korrekterweise als Liste formatiert.
Code
[b]set AppleScript's text item delimiters [b]to {""} 

Diese Zeile kannst Du – vorbeugend – zu Beginn des Scripts einsetzen.

Gruss, Hans


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 16:26
Beitrag # 8 von 14
Beitrag ID: #419694
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke, Hans!
falls Du an dem jetzt laufenden Script interessiert bist, habe ich es hier nochmal rangehängt:
btw, wie formatierst Du die Scripte hier in den Posts so, dass sie aussehen wie im Editor? Etwa zu Fuss? Oder gibts da was automatisches?

tell application "InDesign CS"
 set AppleScript's text item delimiters to {""}
 set Bild to ""
 set skal to 0
 set Proto to ""
 set tabb to " "
 set suche to {}
 set oldDelimiters to AppleScript's text item delimiters
 display dialog oldDelimiters
 set AppleScript's text item delimiters to ":"
 
 tell document "Poster.indd"
 
 
  set ThePages to count of pages
 
  repeat with ThePage from 1 to ThePages
   set myItem to rectangle 1 of page ThePage
   tell myItem
    set geometric bounds to {40, 40, 800, 554}
    fit proportionally given proportionally
    fit given center content
    set BildPfad to file path of item link of all graphics as string
    set NamenListe to every text item of BildPfad
    set Bild to last text item of NamenListe
    --display dialog BildPfad & return & NamenListe & return & Bild
   
    set skal to horizontal scale of all graphics
    set suche to suche & Bild
    set Proto to Proto & Bild
    set Proto to Proto & tabb
    set Proto to Proto & skal
    set Proto to Proto & return
   
    --set Bedeutung to properties of Inhalt
   end tell
  end repeat
  --get properties of page item 1
 
  --set TransTxt to open for access ("Macintosh HD:Users:demski:Documents:Bericht.txt" as string) with write permission
  --set eof of TransTxt to 0
  --write Proto to TransTxt
  --close access file ("Macintosh HD:Users:demski:Documents:Bericht.txt" as string)
 
 
 end tell
end tell
set gefunden to ""


tell application "Finder"
 repeat with cds from 1 to 29
  set AppleScript's text item delimiters to "/"
  set cdName to {}
  set durchsuchen to (choose folder)
  set Unixx to POSIX path of durchsuchen
  set cdName to every text item of Unixx
  set durchsuche to text item ((count of text items of cdName) - 1) of cdName
  set AppleScript's text item delimiters to oldDelimiters
  repeat with i from 1 to count of text items of suche
   set gefunden to do shell script "mdfind -onlyin /Volumes/" & durchsuche & "/ \"kMDItemFSName == " & text item i of suche & "\""
   set AppleScript's text item delimiters to return
   set gefundene to {}
   set gefundene to every text item of gefunden
   
   repeat with finden from 1 to count of text items of gefundene
    set TransTxt to open for access ("Macintosh HD:Users:demski:Documents:found" & i & "_" & finden & ".txt" as string) with write permission
    set eof of TransTxt to 0
    write text item finden of gefundene to TransTxt
    close access file ("Macintosh HD:Users:demski:Documents:found" & i & "_" & finden & ".txt" as string)
    set quelle to text item finden of gefundene as string
    --display dialog quelle
    try
     set kopiRef to do shell script "cp " & quelle & " " & "/Users/demski/Documents/ASPECTA/" & ((i & "_" & finden & "_" & text item i of suche) as string)
    end try
    --set name of kopiRef to i & "_" & finden & "_" & text item i of suche as string
   end repeat
   
   --repeat with varis from 1 to count of text items of gefundene
   -- get text item varis of gefundene
   --duplicate (text item varis of gefundene) to "Macintosh HD:Users:demski:Documents:ASPECTA:" & varis & "_" & durchsuche
   --end repeat
   
  end repeat
  set AppleScript's text item delimiters to oldDelimiters
 end repeat
end tell
set AppleScript's text item delimiters to oldDelimiters


als Antwort auf: [#419687]

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2005, 17:00
Beitrag # 9 von 14
Beitrag ID: #419695
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

danke für die neue Fassung des Scripts. Aber ehrlich gesagt, weiss ich nicht, ob ich heute Abend den Mut haben
werde, die Voraussetzungen zu rekonstruieren ...

Betreffend die 'text item delimiters': Es gibt in der AS-users-list ab und zu Diskussionen, wie man am besten
damit umgehen soll (und vielleicht hast Du mit Deiner Anfrage wieder eine losgetreten ;-).

Wenn Du die Zeile zu Beginn einsetzt, dann kannst Du Dir das Hantieren mit den 'oldDelimiters' sparen.
Im Laufe des Scripts immer das Zeichen so setzen, wie Du es benötigst. Aber immer als Liste:
Code
[b]set AppleScript's text item delimiters [b]to [pink]{[/pink]":"[pink]}[/pink] 

Und am Schluss des Scripts – und bei allen geplanten Abbrüchen – wieder den leeren String zuweisen.

Wie formatiere ich den Text? Zu Fuss wäre es sehr mühsam. Aber mit Peter Fischer's "CodeFormatter 3.0"
geht es komfortabel. Du findest dieses Script auf seiner Web-Site:
http://www.fischer-bayern.de/applescript/html/as_down.html
Aber auch die Scripting Addition "Satimage.osax" muss installiert sein. Und hier im Forum musst Du die Checkbox
"BBCode in diesem Beitrag deaktivieren" nicht aktiviert haben.

Der CodeFormatter ist ein AppleScript, welches den ausgewählten Text eines Scripts mit den notwendigen Codes
versieht und in die Zwischenablage kopiert. Dann muss man im zu postenden Text nur noch mit Befehl-V das
Einsetzen vornehmen. Den Wert von 'size' (= Schriftgrösse) habe ich im Script von 10 auf 12 geändert.

Weil nur das vorderste Scripteditor-Fenster beachtet wird, darf der CodeFormatter nicht ab Scripteditor gestartet
werden. Ich benutze dazu das Hilfsprogramm "Spark" mit welchem man per Tastaturkürzel ein Script starten kann.

"Satimage.osax" und "Spark" findest Du hier: http://www.fachhefte / Link "AppleScripts", im Ordner "z_additions_os_x".

Gruss, Hans


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 17:10
Beitrag # 10 von 14
Beitrag ID: #419696
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super, das probiere ich bei der nächsten Gelegenheit mal aus!

gr. demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

2. Jun 2005, 22:41
Beitrag # 11 von 14
Beitrag ID: #419697
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

wie befürchtet, habe ich Dein Script (noch) nicht in voller Länge getestet.
Ich habe nur einige Versuche mit 'mdfind' gemacht. Verblüffend effizient!

Übrigens: Ich bin ziemlich sicher, dass Du den Finder-tell-Block entfernen kannst.
Denn ein 'choose folder', die 'do shell script'-Befehle und das Schreiben in eine
Datei kommen alle ohne den Finder aus. Im Moment bremst er nur.

Gruss, Hans


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

2. Jun 2005, 22:45
Beitrag # 12 von 14
Beitrag ID: #419698
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok bremsen los ist ne gute Sache.
jetzt habe ich wieder was anderes: hast Du ein snippet, den ich für das Abfangen von Leerzeichen in den Ordnernamen des Quellverzeichnisses benutzen kann?
etwas wie wenn Leerzeichen ersetze durch "/+Leerzeichen"
Ordnernamen mit Leerzeichen mittendrin funktionieren in der shell natürlich gar nicht!

danke, demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

demski
Beiträge gesamt:

3. Jun 2005, 04:18
Beitrag # 13 von 14
Beitrag ID: #419699
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, nachdem nun alles gelaufen ist, folgende nachbetrachtung:
An sich funktioniert die Nummer!
An sich impliziert aber auch eine Einschränkung, gell?
Die da wäre:
Es funktioniert nicht immer!
Ich hatte Fälle, in denen trotz Vorhandensein eines Bildes auf einer CD kein positives Suchergebnis zutage trat :-(
Sogar im Finder mit der GUI-Variante von Spotlight liessen sich manche Bilder nicht finden.
Das erstaunt und erzürnt!
Ich habe auch schon andernorts Klagen über Spotlight gelesen, der Richtung nach "unausgegoren" und so weiter. Vielleicht liegt der Grund für dieses seltsame Verhalten ja darin!
Letztlich musste ich noch etwa ein fünftel der Arbeit händisch erledigen. Und das nach dem gescripte. Schon schade, aber wieder ne Menge gelernt!

So long erstmal und wie immer vielen Dank für alle Hilfe!

grüssli, demski


als Antwort auf: [#419687]

AppleScript und Spotlight...

Hans Haesler
  
Beiträge gesamt: 5826

3. Jun 2005, 08:39
Beitrag # 14 von 14
Beitrag ID: #419700
Bewertung:
(4437 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo demski,

ja, ich habe ein Droplet zum "Säubern" von Datei- und Ordnernamen. Näheres darüber kannst Du hier
nachlesen: "Daten Unix/Linux konform umbenennen" http://www.page-online.de/page/forum/viewthread/2109

Ich werde Dir das Droplet zustellen. Es benötigt auch die Scripting Addition "Satimage.osax".

Aber: Es gibt zwei "Aber" ... Wenn die Dateien auf einer CD sind, können deren Namen nicht geändert werden.
Und wenn die Bilder in InDesign neu verlinkt werden müssen, dann stimmen die Namen nicht überein.

Deshalb würde ich es zuerst mit der 'quoted form' des Pfades versuchen:
Code
[b]set Unixx [b]to quoted form [b]of POSIX path [b]of durchsuchen 

Mit 'quoted form' wird der String mit zusätzlichen einfachen Anführungszeichen eingefasst und das bewirkt,
dass auch "fremde" Zeichen akzeptiert werden.

Gruss, Hans


als Antwort auf: [#419687]
X