Este es el guión:
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
Mi problema es que estoy ejecutando esto en una carpeta con miles de imágenes y carpetas. Finder alcanza alrededor del 90% de uso de CPU y tarda aproximadamente 40 segundos POR ARCHIVO/CARPETA para configurar el comentario y la etiqueta.
¿Existe alguna optimización que cualquiera pueda sugerir? ¿O alternativamente, una alteración del código que permitirá una implementación 100% de script Bash de esta tarea? (Si eso ayuda con la velocidad).
Siento que puede haber algo en el comando "contenido completo" que está estropeando las cosas.
Al igual que antes de realizar un cambio en un archivo o carpeta determinado, vuelve a buscar etiquetas de "Archivado" en TODOS los archivos después de realizar un solo cambio. Al principio pensé que esto se almacenaría en caché en la memoria.
¡Me encantaría cualquier idea que puedas tener!
Salud,
Jaime
editar: El sistema es Snow Leopard Server 10.6.8, Xserve2,1
Respuesta1
Prueba esto:
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))
o
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))