[GastForen Programmierung/Entwicklung AppleScript Unterordner nach doppelten Bildern durchsuchen

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

Unterordner nach doppelten Bildern durchsuchen

Anonym
Beiträge gesamt: 22827

5. Sep 2005, 12:59
Beitrag # 1 von 11
Bewertung:
(3123 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

habe Ordner/Unterordner in denen sich Bilder mit gleichem Namen befinden,
Kann man per Script/Droplet die mehrfachen Bilder aufspüren und farblich markieren?

Danke im Vorraus
willem
X

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

5. Sep 2005, 14:32
Beitrag # 2 von 11
Beitrag ID: #420135
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

unter welchem Mac OS?

Und soll dass Script selbständig auf die Suche gehen? Das heisst, der Anwender wählt den
Hauptordner aus und dann listet das Script die Inhalte der Unterordner auf und bezeichnet
mehrfach vorhandene Dateien.

Sollte machbar sein. Muss mir aber gut überlegen, wie vorgehen.

Enthalten die Unterordner auch noch Ordner?

Gruss, Hans


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Anonym
Beiträge gesamt: 22827

5. Sep 2005, 15:46
Beitrag # 3 von 11
Beitrag ID: #420136
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
tschuldigung,

> unter welchem Mac OS?
unter OS-10.3

> soll dass Script selbständig auf die Suche gehen?
ja, dass ich den Hauptordner auswähle und ...
alle vorhandenen Duplis farblich gekennzeichnet werden.

Gruss willem


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

5. Sep 2005, 16:17
Beitrag # 4 von 11
Beitrag ID: #420137
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

>tschuldigung,

Kein Problem! :-)

Wie sieht die Struktur aus? Enthält der Hauptordner nur Ordner? Und
keine (losen) Dateien? Und die Unterordner? Enthalten sie keine Ordner?

Reicht die Verwendung einer Etikettenfarbe? Oder sollte für jede
gleichnamige Gruppe von Dateien eine andere Farbe verwendet werden?
Wäre beschränkt auf 7.

Leider kann ich erst heute Abend mit dem Enwickeln des Scripts anfangen.

Gruss, Hans


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Anonym
Beiträge gesamt: 22827

5. Sep 2005, 17:40
Beitrag # 5 von 11
Beitrag ID: #420138
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

die Ordnerstruktur ist wie folgt:

Master (Hauptordner)
    M0514 (Ordner)
        Bilder (Ordner)
            M0514s022-023 (Ordner)
                B037-04-09.lay (File)
                B728-26-03.lay (File)
    M0515 (Ordner)
        Bilder (Ordner)
            M0515s036037 (Ordner)
                B040-04-11.lay (File)
                B728-26-03.lay (File)
    M0516 (Ordner)
        Bilder (Ordner)
            M0516*014-015 (Ordner)
                B231-02-32.lay (File)
                u.s.w.

> Reicht die Verwendung einer Etikettenfarbe? Oder sollte für jede
> gleichnamige Gruppe von Dateien eine andere Farbe verwendet
> werden?  Wäre beschränkt auf 7.

Das wäre natürlich super. Die 7 Farben reichen vollkommen aus.

Gruss willem


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

5. Sep 2005, 21:40
Beitrag # 6 von 11
Beitrag ID: #420139
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

hier schon mal eine erste Lösung. Anwendung: Den Master-Ordner auf das Icon des Droplets
ziehen und abwarten. Das Script geht die Ordnerstruktur mit einem rekursiven (= sich selbst
aufrufenden) Handler durch. Die Name der aktuellen Datei wird mit dem Inhalt einer Liste
verglichen. Falls der Name nicht vorkommt, wird er an die Liste gehängt. Sonst wird die
Datei eingefärbt.

Der Einfachheit halber wird für alle Dateien dieselbe (rote) Etikettenfarbe verwendet. Nach
den Testläufen zu schliessen, sollte dies ausreichen.

Noch etwas: Wenn z.B. vier gleichnamige Dateien gefunden werden, dann färbt das Script nur
drei davon ein. Ich hoffe sehr, dass dies okay ist (sonst würde es kompliziert ...).
---
global ctr
global mainList

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
   display dialog "Den Master-Ordner auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
   -- die Zählervariable initialisieren
   set ctr to 0
   -- eine Liste vorbereiten
   set mainList to {}
   -- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
   repeat with aObject in allObjects
      processObject(aObject)
   end repeat
   if ctr is 0 then
      display dialog "Keine mehrfach vorhandenen
Dateien gefunden." buttons "OK" default button 1 with icon 1 giving up after 3
   else if ctr is 1 then
      display dialog "Eine einzige doppelte Datei gefunden." buttons ¬
         "OK" default button 1 with icon 1 giving up after 3
   else if ctr is greater than 1 then
      display dialog "Mehrfach vorhandene Dateien: " & ctr buttons ¬
         "OK" default button 1 with icon 1 giving up after 3
   end if
end open

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist
-- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt
-- (d.h. zum aktuellen Handler geschickt)
-- Dateien werden zum Handler 'processFile' gesandt
on processObject(aObject)
   -- der Test stellt den Wert der Variable fest und die entsprechende Aktion wird ausgelöst
   if (aObject as Unicode text) ends with ":" then
      -- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
      set contentsList to list folder aObject without invisibles
      -- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler,
      -- in welchem sie sich selbst befindet
      repeat with anItem in contentsList
         set objPath to ((aObject as Unicode text) & anItem)
         processObject(objPath as alias)
      end repeat
   else
      processFile(aObject as Unicode text)
   end if
end processObject

-- in diesem Handler werden die Dateien behandelt
on processFile(aFile)
   -- der Name der aktuellen Datei wird festgestellt
   set curName to name of (info for file aFile)
   -- falls dieser Name noch nicht in der Haupliste ist ...
   if curName is not in mainList then
      -- ... wird er daran angefügt ...
      set end of mainList to curName
   else
      -- ... sonst wird die Datei eingefärbt
      tell application "Finder" to set label index of file aFile to 2
      -- der Wert der Zählervariable wird um eins erhöht
      set ctr to ctr + 1
   end if
end processFile

---
Ein zweites – ähnlich aufgebautes – Droplet setzt die Etikettenfarbe zurück auf "Keine".
Kann vielleicht mal nützlich sein. Beide Scripts sind unterwegs zu Dir.

Gruss, Hans


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Anonym
Beiträge gesamt: 22827

6. Sep 2005, 07:31
Beitrag # 7 von 11
Beitrag ID: #420140
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Danke, die Scripte funktionieren Bestens.

Falls es ohne grossen Aufwand möglich ist:
Wenn alle gleichnamigen Dateien farblich markiert würden, könnte ich anhand des Datums die aktuellste Datei idendifizieren.

Dass Du bereits vorrausschauend ein zweites Script zum Entfernen der EtikettenFarbe erstellt hast - einfach Toll.

herzliche Gruesse
willem


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

6. Sep 2005, 08:39
Beitrag # 8 von 11
Beitrag ID: #420141
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo willem,

Es ist eine typische Catch-22-Situation: Wenn die erste von mehrfach vorhandenen Dateien behandelt wird,
weiss das Script noch nicht, dass noch weitere gleichnamige kommen werden ...

Als Lösung sehe ich, dass parallel eine zweite Liste geführt wird, in welcher die Pfade aufgelistet werden.
Aber dann hat man immer noch das Problem zu lösen, welcher Eintrag es ist ... Und das "Nachträglich-Einfärben"
sollte nur einmal vorgenommen werden. Man müsste also auch dies noch verwalten. Vielleicht schaffe ich es
auch, verschiedene Farben zu benutzen.

Leider habe ich momentan tagsüber keine Zeit, mich damit zu befassen. Ich werde heute Abend versuchen,
die skizzierten Ideen umzusetzen.

Gruss, Hans


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

6. Sep 2005, 17:09
Beitrag # 9 von 11
Beitrag ID: #420142
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo willem,

ich bin mit meiner Arbeit gut vorangekommen. Deshalb habe ich zum "Auslüften" des Kopfes
die zweite Version des Droplets anpacken können. Nun werden alle Duplikate einer Namensgruppe
eingefärbt. Und – als Gipfel des Komforts – jede Gruppe hat eine eigene Etikettenfarbe! :-)
---
global ctr
global doneList
global labelColor
global nameList
global pathList

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
   display dialog "Den Master-Ordner auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
   -- die Zählervariable initialisieren
   set ctr to 0
   set labelColor to 0
   -- die Listen vorbereiten
   set doneList to {}
   set nameList to {}
   set pathList to {}
   -- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
   repeat with aObject in allObjects
      processObject(aObject)
   end repeat
   if ctr is 0 then
      display dialog "Keine mehrfach vorhandenen
Dateien gefunden." buttons "OK" default button 1 with icon 1 giving up after 3
   else if ctr is 1 then
      display dialog "Eine einzige doppelte Datei gefunden." buttons ¬
         "OK" default button 1 with icon 1 giving up after 3
   else if ctr is greater than 1 then
      display dialog "Mehrfach vorhandene Dateien: " & ctr buttons ¬
         "OK" default button 1 with icon 1 giving up after 3
   end if
end open

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist
-- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt
-- (d.h. zum aktuellen Handler geschickt)
-- Dateien werden zum Handler 'processFile' gesandt
on processObject(aObject)
   -- der Test stellt den Wert der Variable fest und die entsprechende Aktion wird ausgelöst
   if (aObject as Unicode text) ends with ":" then
      -- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
      set contentsList to list folder aObject without invisibles
      -- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler,
      -- in welchem sie sich selbst befindet
      repeat with anItem in contentsList
         set objPath to ((aObject as Unicode text) & anItem)
         processObject(objPath as alias)
      end repeat
   else
      processFile(aObject as Unicode text)
   end if
end processObject

-- in diesem Handler werden die Dateien behandelt
on processFile(aFile)
   global doneList
   global nameList
   -- der Name der aktuellen Datei wird festgestellt
   set curName to name of (info for file aFile)
   -- falls dieser Name noch nicht in der Hauptliste ist ...
   if curName is not in nameList then
      -- ... wird er daran angefügt ...
      set end of nameList to curName
      set end of pathList to aFile
   else
      -- ... sonst wird geprüft, ob das erste Duplikat eingefärbt ist ...
      if curName is not in doneList then
         set labelColor to labelColor + 1
         if labelColor is 8 then set labelColor to 1
         repeat with i from 1 to count of nameList
            if item i of my nameList is curName then
               tell application "Finder" to set label index of file (item i of my pathList) to labelColor
               set end of doneList to curName
               exit repeat
            end if
         end repeat
         set ctr to ctr + 1
         -- ... und die aktuelle Datei wird auch eingefärbt
         tell application "Finder" to set label index of file aFile to labelColor
         -- der Wert der Zählervariable wird um eins erhöht
         set ctr to ctr + 1
      else
         -- ... wenn ja wird der Index der Etikettenfarbe festgestellt ...
         repeat with i from 1 to count of doneList
            if item i of my doneList is curName then
               set labelColor to (i mod 7)
               exit repeat
            end if
         end repeat
         if labelColor is 0 then set labelColor to 7
         -- ... und nur die aktuelle Datei eingefärbt
         tell application "Finder" to set label index of file aFile to labelColor
         -- der Wert der Zählervariable wird um eins erhöht
         set ctr to ctr + 1
      end if
   end if
end processFile

---
Das Droplet ist unterwegs zu Dir.

Gruss, Hans


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Anonym
Beiträge gesamt: 22827

6. Sep 2005, 21:21
Beitrag # 10 von 11
Beitrag ID: #420143
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

was Du "Auslüften" nennst, hieße bei mir "Kopf raucht"

Danke für die "Deluxe" - Version!

willem


als Antwort auf: [#420134]

Unterordner nach doppelten Bildern durchsuchen

Hans Haesler
  
Beiträge gesamt: 5826

6. Sep 2005, 22:50
Beitrag # 11 von 11
Beitrag ID: #420144
Bewertung:
(3122 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo willem,

bitteschön. Dann scheint es ja zu klappen.

Nachzutragen ist noch, dass die Gruppenzugehörigkeit nur bei maximal sieben verschiedenartigen Namen,
welche mehrfach vorkommen, eindeutig ist. Der achten Gruppe wird wieder die erste Farbe zugewiesen.
Habe es zwar (noch) nicht getestet, aber den Code in diesem Sinne getippt ...

Von wegen "Auslüften": Nichts ist entspannender, als ein Script zu entwickeln. :-)

Gruss, Hans


als Antwort auf: [#420134]
X