2012年10月23日火曜日

【AppleScript】 ファイル/フォルダ名から検索してラベルを変更

Finderの地味便利な機能、ラベルをもっと簡単に使おうというスクリプトです。
ぐーたらとPC触ってる僕からしたら、パッと見で分かるってのは結構大事なのです。
ラベルなくして一流ズボラーは語れないと言ってもいいでしょう。

とりあえず本体はこちら。スクリプト形式です。

ファイル名から検索してラベルを変更.scpt

仕様



検索したい文字列を入力して、ファイル/フォルダ名に含む場合にラベルを変更します。
ターゲットはFinderの最前面ウィンドウです。
ファイル/フォルダを未選択の場合は、最前面ウィンドウ直下の全ファイル/フォルダ、ファイル/フォルダを複数選択している場合は、選択したもののみがラベル変更の対象になります。
まあとりあえず使ってみるのが手っ取り早いです。


使い方



ユーザー・スクリプト・フォルダから使うことを想定してます。
なにも考えずに突っ込みましょう。

001

使うとこんなダイアログが出るので、カタカタと検索ワードを入力します。

002

普通に検索するタイプと、正規表現を使って検索するタイプとあります。
ファイル名検索となると、正規表現抜きではシンドイことが多々あるのでつけました。
場合によって使い分けてください。

お次にカラー選択ダイアログが出るので、好きな色を選んでポチ。

003

おしまい。簡単ですね。


その他もろもろ



〜 このままでもそこそこ便利だけど、もう一工夫するとしたら編 〜 です。
Automatorと組み合わせて、サービスにするのもいいかもしれませんね。
右クリックメニューから実行できるのはなにかと便利。(ゴチャゴチャしやすいけど)
もしくは、フォルダアクションにして自動ラベル貼りフォルダを作るとかとか。
ダウンロードフォルダに割り当てれば、なかなか活躍しそうではあります。

どっちも試してないので憶測ですけど、チョチョイで出来ると思います。
気になる人はお試しあれです。


--指定文字列をファイル名に含むファイル/フォルダのラベルを変更

set label_list to {{"ラベルなし", "レッド", "オレンジ", "イエロー", "グリーン", "ブルー", "パープル", "グレイ"}, {0, 2, 1, 3, 6, 4, 5, 7}}

set {button returned:match_type, text returned:match} to display dialog "文字列を入力してください" default answer "" with title "一致するファイル/フォルダのラベルを変更" buttons {"キャンセル", "検索", "正規表現で検索"} default button 2
set sel_color to choose from list item 1 of label_list with title "ラベル" with prompt "ラベルを選択してください"
if sel_color = false then
error number -128
end if
set color_num to first item of getSpecifiedFieldData(label_list, first item of sel_color) of me

set file_list to finder_select_or_all()

if match_type = "検索" then
repeat with afile in file_list
if name of afile contains match then
my label_check(afile, color_num)
end if
end repeat

else if match_type = "正規表現で検索" then
repeat with afile in file_list
if my grep(afile, match) = 1 then
my label_check(afile, color_num)
end if
end repeat
end if
do shell script "afplay /System/Library/Sounds/Hero.aiff"


--finderで選択しているファイルリストを返す
--選択なしの場合は全ファイルリストを返す
on finder_select_or_all()
tell application "Finder"
set file_list to (selection as list)
if file_list = {} then
set apath to target of Finder window 1 as alias
set file_list to every item of apath
end if
end tell
return file_list
end finder_select_or_all

--grepチェック
on grep(afile, match)
try
do shell script "echo " & name of afile & " | grep " & match & ""
return 1
on error
return 0
end try
end grep

--ラベルつけ
on label_check(afile, color_num)
tell application "Finder"
try
set label index of afile to color_num
end try
end tell
end label_check

--AS Hole(AppleScriptの穴) By Piyomaru Software » 入れ子のリストから、指定フィールドのデータを取得する » Blog Archive
--http://piyocast.com/as/archives/2015

--入れ子のリストから、指定フィールドのデータを取得する
--1アイテム目はフィールドラベル。2アイテム目以降をデータと見なして指定フィールドのデータをリストで返す
on getSpecifiedFieldData(aData, fieldName)
-- 与えられたデータaDataの1アイテム目はフィールド名と見なす
set fieldList to contents of first item of aData
set dataList to contents of items 2 thru -1 of aData

set fNum to getNumberOfField(fieldList, fieldName) of me
if fNum = 0 then return false

set resList to {}
repeat with i in dataList
set the end of resList to contents of item fNum of i
end repeat

return resList

end getSpecifiedFieldData

-- 与えられたリスト中における任意テキスト要素の出現アイテム番号
on getNumberOfField(aList, targFieldName)
set aCount to 1
repeat with i in aList
set j to contents of i
if j is equal to targFieldName then
return aCount
end if

set aCount to aCount + 1
end repeat

return 0 -- no hit
end getNumberOfField

0 件のコメント:

コメントを投稿