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))