Applescript erschreckend langsam Finder.app Kommentar festlegen

Applescript erschreckend langsam Finder.app Kommentar festlegen

Dies ist das Skript:

set d to do shell script "date +%d-%m-%Y"
tell application "Finder"
    set dir to POSIX file ("/Volumes/Xsan/PathTo/Folder") as alias
    repeat with f in entire contents of dir
        if comment of f does not start with "Archived" then
            set comment of f to "Archived " & d
            set label index of f to 2
        end if
    end repeat
end tell

Mein Problem ist, dass ich dies in einem Ordner mit Tausenden von Bildern und Ordnern ausführe. Der Finder benötigt etwa 90 % der CPU-Auslastung und es dauert ungefähr 40 Sekunden PRO DATEI/ORDNER, um den Kommentar und das Etikett festzulegen.

Kann jemand eine Optimierung vorschlagen? Oder alternativ eine Änderung des Codes, die eine 100 %ige Bash-Skriptimplementierung dieser Aufgabe ermöglicht? (Falls das der Geschwindigkeit zuträglich ist).

Ich habe das Gefühl, dass etwas im Befehl „gesamter Inhalt“ möglicherweise Probleme bereitet.

Bevor eine Änderung an einer bestimmten Datei oder einem Ordner vorgenommen wird, sucht es nach einer einzigen Änderung erneut nach ALLEN Dateien, ob sie mit dem Tag „Archiviert“ gekennzeichnet sind. Ich dachte, dies würde zu Beginn im Speicher zwischengespeichert.

Würde mich über alle Ideen freuen, die Sie haben!

Prost,

James

bearbeiten: Das System ist Snow Leopard Server 10.6.8, Xserve2,1

Antwort1

Versuche dies:

    set time1 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"

set d to do shell script "date +%d-%m-%Y"    
    tell application "Finder"
        set dir to POSIX file "/Volumes/Xsan/PathTo/Folder" as alias
        set eContents to entire contents of dir
        repeat with f in my eContents
            if comment of f does not start with "Archived" then
                set comment of f to "Archived " & d
                set label index of f to 2
            end if
        end repeat
    end tell

    set time2 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"
    set millisec to (round ((time2 - time1) * 1000))

oder

set time1 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"

set d to do shell script "date +%d-%m-%Y"
tell application "Finder"
    set dir to POSIX file "/Volumes/Xsan/PathTo/Folder" as alias
    set eContents to every file of (entire contents of dir) whose comment does not start with "Archived"
    repeat with f in my eContents
        set comment of f to "Archived " & d
        set label index of f to 2
    end repeat
end tell

set time2 to do shell script "perl -e 'use Time::HiRes qw(time); print time'"
set millisec to (round ((time2 - time1) * 1000))

verwandte Informationen