Yosemite에서 자동화 용 JavaScript를 사용하여 폴더에있는 모든 파일 나열


0 Answers

"System Events" 접근법은 단순함의 장점을 가지고 있지만, $.NSFileManager (이제 스크립팅에 직접 사용할 수 있음)를 사용하면 눈에 띄게 빨라진 성능을 얻을 수 있습니다.

내 시스템에서 비교를 위해 시작

var strPath = '/usr';

var appSys = Application('System Events'),
lstHarvest = appSys.folders.byName(strPath).diskItems.name();

수천 번의 반복 테스트를 통한 빠른 테스트 결과, 약간 바로크적인 방식으로 꾸준히 40 %의 속도를 꾸준히 늘릴 수 있음을 알 수 있습니다.

var strPath = '/usr';
var fm = $.NSFileManager.defaultManager,
    oURL = $.NSURL.fileURLWithPathIsDirectory(strPath, true),
    lstFiles = ObjC.unwrap(
        fm.contentsOfDirectoryAtURLIncludingPropertiesForKeysOptionsError(
            oURL, [], 1 << 2, null
        )
    ),
    lstHarvest = [];

lstFiles.forEach(function (oItem) {
    lstHarvest.push(
        ObjC.unwrap(oItem.path)
    );
});

그리고 훨씬 더 단순하게 300 %가 넘습니다.

var strPath = '/usr';
var fm = $.NSFileManager.defaultManager,
    lstFiles = ObjC.unwrap(
        fm.contentsOfDirectoryAtPathError(strPath, null)
    ),
    lstHarvest = [];

lstFiles.forEach(function (oItem) {
    lstHarvest.push(
        ObjC.unwrap(oItem)
    );
});
Question

이전의 AppleScript를 새로운 JavaScript 구문으로 이식하려고합니다.

Somethings는 꽤 직선적 인 것처럼 보인다.

tell application "System Events" to keystroke "t" using command down

다음과 같이됩니다.

System = Application('System Events');
System.keystroke("t", {using: "command down"})

그러나 나는 내 삶이 특정 위치에 파일을 나열하는 방법을 찾지 못한다. AppleScript에서 /usr 디렉토리에있는 파일 목록을 반환하려면 다음을 수행하십시오.

tell application "System Events" to set fileList to name of items in folder "/usr"
-- > {"bin", "include", "lib", "libexec", "local", "sbin", "share", "standalone", "X11"}

그러나 나는 내 인생이 Javascript에서 그것을하는 방법을 해결할 수 없습니다.

System = Application('System Events')
myPath = Path("/usr")

fileList = System.items(myPath) 
-- > message not understood

fileList = System.folder(myPath)
-- > message not understood

fileList = System.diskItems(myPath)
-- > []

fileList = System.diskItems({at:myPath)
-- > []

나는 너무 많은 다른 조합을 시도했지만 행운은 없다. 어떤 아이디어?



Related