Applescript lamentablemente lento Finder.app Establecer comentario

Applescript lamentablemente lento Finder.app Establecer comentario

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

información relacionada