Applescript 비참할 정도로 느린 Finder.app 댓글 설정

Applescript 비참할 정도로 느린 Finder.app 댓글 설정

스크립트는 다음과 같습니다.

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

내 문제는 수천 개의 이미지와 폴더가 있는 폴더에서 이것을 실행하고 있다는 것입니다. Finder는 CPU 사용량이 약 90%에 달하며 주석과 레이블을 설정하는 데 파일/폴더당 약 40초가 걸립니다.

누구나 제안할 수 있는 최적화가 있습니까? 아니면 이 작업을 100% Bash 스크립트로 구현할 수 있도록 코드를 변경하시겠습니까? (속도에 도움이 되는 경우)

"전체 내용" 명령에 문제를 일으키는 뭔가가 있을 수 있다고 생각합니다.

특정 파일이나 폴더를 변경하기 전과 마찬가지로 단일 변경을 수행한 후 모든 파일에서 "보관됨" 태그를 다시 확인합니다. 처음에는 이것이 메모리에 캐시될 것이라고 생각했습니다.

당신이 가지고 있는 어떤 아이디어라도 좋아할 것입니다!

건배,

제임스

편집: 시스템은 Snow Leopard Server 10.6.8, Xserve2,1입니다.

답변1

이 시도:

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

또는

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

관련 정보