AppleScriptでフォルダ階層以下すべての指定種類のファイルリストを取得〜指定kind救出作戦
AppleScriptで、あるフォルダ階層以下(下位フォルダも含む)に入っている、すべてのファイルのリスト(aliasのリスト)を取る必要がありました。
- “System Events"でファイル一覧取得
- kind of …で指定した種類のファイルを記録
- “System Events"でフォルダ一覧取得
- それぞれのフォルダに付いて、再起的に同じ事を繰り返す
次の例の場合、png形式の画像ファイルのリストを作っています。
(* Gather files whose are "kdTyp"
* Copyright (c) 2014 webmaster@oichinote.com
* Created on 2014-06-19
* Licence is GPL2
*)
global kdList
global kdType
set kdList to {}
set kdType to "PNG イメージ"
set startFolder to choose folder
gatherKind(startFolder)
display dialog length of kdList
-- Gather all files whose kind is kdType to kdList
on gatherKind(startFolder)
-- get all files
tell application "System Events"
set allFiles to every file of startFolder
end tell
-- get files of kdType
repeat with aFile in allFiles
-- set name_of_file to (name of aFile)
if kind of aFile is equal to kdType then
set end of kdList to (aFile as alias)
end if
end repeat
-- get all folders
tell application "System Events"
set newFolders to every folder of startFolder
end tell
-- recuresive call
repeat with aFolder in newFolders
gatherKind(aFolder)
end repeat
end gatherKind
見つかったファイルを、alias形式でどんどん追加して行きます。aliasとは、多分CNIDの事だと思います。
最初、&演算子でリストの追加をしていたのですが、"end of …"を使った方が速いと、次のページに書かれていたので試してみました。
確かに速くなりました! ありがとうございます。そして、リストには、[]形式もあると言う事で、こちらも試してみました。そうしたら、10分以上経過しても終了しませんでした。
手法 | 1回目 | 2回目 | 3回目 | 平均 |
---|---|---|---|---|
“&" | 17,328.2ミリ秒 | 22,366.8ミリ秒 | 27,884.6ミリ秒 | 22,526.5ミリ秒 |
end of | 15,524.6ミリ秒 | 18,604.0ミリ秒 | 21,778.2ミリ秒 | 18,635.6ミリ秒 |
この実験には、約6,000個のファイルをリストアップしています。
時間計測には次のスクリプティング機能拡張を使いました。ありがとうございます。ダウンロードした後、右クリックで「開く」必要があります。
また、リストアクセスの高速化手法に付いても、書かれています。こちらは、リストを作る時ではなく、アクセスする時の高速化です。
AppleScriptと言えば、次のウェブサイトに非常に多くの情報があります。特定の種類のファイルを集める効率的なやり方が掲載されています。ありがとうございます。
使えるのか? 私に? ここで紹介されているテクニックは高尚すぎて、残念ながら私には使いこなせませんでした。
ディスカッション
[…] 参考: AppleScriptでフォルダ階層以下すべての指定種類のファイルリストを取得〜指定kind救出作戦 : プラスα空間 […]