特定の階層にあるものだけ検索対象としたい
こんにちは。
spotlightで、「検索対象となるフォルダの第一階層にあるものだけ」を検索対象にしたいのです。
いろいろと設定を見たり、ネットを検索したりしましたがわかりませんでした。
方法をご存じの方、教えていただければ幸いです。
※ターミナルを使う方法は使用できません。
スキルがバラバラな大勢が同じようにできる方法を探していますので……
こんにちは。
spotlightで、「検索対象となるフォルダの第一階層にあるものだけ」を検索対象にしたいのです。
いろいろと設定を見たり、ネットを検索したりしましたがわかりませんでした。
方法をご存じの方、教えていただければ幸いです。
※ターミナルを使う方法は使用できません。
スキルがバラバラな大勢が同じようにできる方法を探していますので……
ファインダで検索対象としたいフォルダを選択すれば、結果として当該フォルダの第一階層にあるものが判ると思います。検索にはなっていないですけどね。人力検索…
カラム表示等にすると、ABC順、アイウエオ順当になって探しやすいと思います。
スポットライト検索でご希望の作業は無理かと思います。
↑いや、それだとファイル名しか検索できないじゃないですか。内容で検索するにはちょっと困りますよね。
かと言っていいアイデアも浮かばないんですが、もう少し具体的な背景などがわかれば代替案が出やすいのかもしれません。そのフォルダに含まれるファイルの数や、頻繁に更新されるものかどうか、など。
>↑いや、それだとファイル名しか検索できないじゃないですか。
それでいいんじゃないでしょうか?
oyaさんの質問は、「検索対象となるフォルダの第一階層にあるものだけ」と言う事ですから。
ファイルの内容に関しては、スポットライトのデータベースはヴォリュームが対象ですから、検索領域を限定するのは難しいと思いますが。
ファイルメニューの「検索...」を使用して下さい。
検索結果のウィンドウの仕様が違うので
自分はメニューバーのSpotlightよりもよく使っています。
内容検索も出来ますし、特定フォルダならスマートフォルダにすれば便利。
毎回異なるキーワードに入力し直すことも出来ます。
>↑いや、それだとファイル名しか検索できないじゃないですか。
それでいいんじゃないでしょうか?
oyaさんの質問は、「検索対象となるフォルダの第一階層にあるものだけ」と言う事ですから。
ファイルの内容に関してだとすると、Spotlightの(メタ)データベースはヴォリュームが対象ですから、難しいと思いますが。結局はSpotlightで検索するとヒット数が多すぎるのでその辺を何とかしたいと言う事だと思いましたので、ファイル名だけでも限定出来れば、あとは自分で見当をつける意外に方法がないのではと思います。
さもなければ無条件でスポットライトを使用するかだと思います。あるいはFinderの検索で条件検索をするとか。
複数の人がいつも同じ(共有)フォルダを検索するとかで、検索対象があまり頻繁に書き変わらないのであれば、第一階層にあるファイルのすべてに特定のラベルを貼るとかで対処できるのかな、とも思ったのですが。
いずれにしても、やや特殊な要求なので、事情や状況がもう少しわからないと。
>ファイルメニューの「検索...」
この検索でも、指定したフォルダの中は全部探しにいっちゃうので、検索を第1階層のみに限定はできませんよね?
Spotlightでは階層制限は無理だと思います。検索結果から第1階層だけを見るのではだめなのでしょうかね?
お返事をありがとうございました。
状況を補足させていただきます。
ひとつのフォルダの中に、数百〜千くらいのフォルダが入っています。
フォルダの名前は、「クライアント名+日付+若干の詳細」のような感じです。
名前順にすると、クライアント名では並びますが、
「若干の詳細」で検索する必要もあります。
(例えば、「竣工」と名のついたものだけピックアップしたい、など)
一つ一つのフォルダには、いろいろなファイルが入っており、
中には「〜〜竣工写真.jpg」や、「竣工」の文字が入ったテキストファイルや、
「〜〜様竣工資料」フォルダなど、
パターンが予測できないファイル・フォルダが含まれています。
(名付けをコントロールできない不特定多数からのデータも多いため)
こうした中から、特定の階層のみに検索結果を絞りたいのです。
いただいたお返事から、どうもspotlightでは無理そうだと理解しつつありますが、
もしなにか情報をお持ちであればぜひ教えていただきたく思います。
よろしくお願いいたします。
階層を特定しなければならない理由がまだはっきりしません。下層フォルダまで検索してしまっても、フォルダごとに結果が示されるのですから、最上位のフォルダの結果を見ればすむことではないのでしょうか?それとも、検索に時間がかかるとか、結果の表示が膨大になるからとか、他の理由があるのでしょうか?
また、検索したいのはファイル名だけなのですか?Spotlightのように内容で検索する必要がないなら、Name Search Companionをインストールした方が手っ取り早いと思います。これなら特定のフォルダに限定してサーチできますし、Finderのツールバーに登録できるので、手軽に使うことができます。
>(例えば、「竣工」と名のついたものだけピックアップしたい、など)
こう言う事であれば、takanoさんの書かれたように、7種類しか有りませんが、ラベルを上手く分類してFinderでの検索が良いと思います。
あとはいかにラベルの対象内容を構成するかでしょう。
Finderの検索では、検索をするフォルダ(特定の階層とは見方を変えれば、1つのフォルダです)も指定出来たはずです。確か「その他」と言う項目がFinderバーに表れますのでそれで選択出来たはずです。
この2つを上手く組み合わせればどうでしょうか?
> こうした中から、特定の階層のみに検索結果を絞りたいのです。
使い方がある程度しぼられていて、セットアップ対象が少ないのであればSpotlight コメント欄を利用するのがいいのではないでしょうか?
検索対象のフォルダのSpotlight コメント欄に例えば「詳細検索対象」とか記述しておいて検索時にコメント欄で条件を絞ればそのフォルダだけで検索が可能になります。
複数のフォルダにまとめてコメントを入力する場合はAutomatorを利用するといいのではないかと思います。
ご参考まで。
Y. Kawabeさんの指摘でやっと気づきましたです…(T_T)
「検索を"第1階層のみ"に限定」を理解していませんでした…ゴメンナサイ
サブフォルダまで検索して欲しくないのですね…
補足された状況を読みましたが、spotlightのメタデータ検索まで必要とせず、
oyaさんの検索対象は、『単にファイル・フォルダ名を対象としていて、
検索でヒットした物は、単にダブルクリックで開くだけ』ですか?
もしそうであれば、簡単なスクリプトを組んでみました。
/アプリケーション/AppleScriptフォルダにある、スクリプトエディタを起動して
下記の二重線以下をコピー&ペーストして、テスト実行してみて下さい。
"検索結果をどうしたいのか"が解らないので、とりあえず
1)検索対象のフォルダを選択。
(よく使うフォルダはFinderのサイドバーに追加しておくと指定に便利)
2)検索文字列を指定する(とりあえず空欄不可で設計しました)
3)指定文字列にマッチするファイル・フォルダ名が列挙され、
4)結果から任意選択(ShiftやCommandで複数選択可能)した項目を、
5)Finderでダブルクリックしたのと同じ動作をします。
Spotlightとは関係なく、あくまでスクリプトなので、項目数が多い場合は
結果が出るまで十数秒待つ必要がある場合があるので(待てば出ますが)、
念のためまずは少なめの場所でテストお願いします。
ちなみに、テスト後単体アプリにしたり(この場合、直前の検索文字列を記憶可能)
「検索結果をどうするのか」を改造したり(あまり複雑なことはムリかも(+_+))
メニューバーに追加してメニューから実行できるようにも出来ます…
========================
property sss : "0"
tell application "Finder"
local fff, x, res, slist, ss
set fff to choose folder with prompt "検索対象となるフォルダを選択して下さい。"
repeat
display dialog "検索対象文字列を入力して下さい。" & return & "空欄は不可です。" default answer sss with icon note --ユーザに検索対象文字列入力を求める
set res to result --結果を保存
set sss to (text returned of result) --ユーザの入力した文字列を取得し、空の文字列かどうか判断
if sss is not "" then
exit repeat --空の文字列の場合はループを抜けずに、ユーザに再度検索対象文字列入力を求め続ける
end if
end repeat
set slist to name of (every item of fff whose name of it contains sss)
choose from list slist with prompt "開く項目を選択して下さい。" with multiple selections allowed
set res to result --結果を保存
if res is not false then
repeat with x in res
if x is not "" then
open (every item of fff whose name of it is equal to x)
end if
end repeat
end if
end tell
同じく使い方が絞られていて、つまり特定の条件で括りたく、しかもその特定の条件セットの必要数が2桁程度までならば、検索するんではなくて、条件を指定した複数のスマートフォルダを用意しておくってのもアリかと。これなら検索せんでも、開けばまとまってるし。一旦管理者が指定してしまえば、作業者はスキルなんてなくても開けば特定条件でまとまってるし。
# というか、ファイル名付、フォルダ名付のルール決めをしなくちゃいけないんではないでしょうか? スキルがバラバラ?勉強会を開いては如何でしょう。ごちゃごちゃなままスキルが様々な人に勝手に弄らせたりしていると、不用意にファイルを削除しちゃったりしないか私なんかはすごく心配になりますが。。。
1つもヒットしないとエラーになるなんて致命的(T_T)スクリプト改訂しました…
編集削除できないー(泣) msg # 3.3は使用せずに下記を使用して下さい…
ヒットしない場合、検索リトライ可能にしました(+_+)
メニューに入れておけば操作は簡単なのでスキルばらばらでも大丈夫かと…
==============================
property sss : "0"
tell application "Finder"
local fff, x, res, slist, ss
set fff to choose folder with prompt "検索対象となるフォルダを選択して下さい。"
repeat --検索メインループ(各ダイアログでキャンセル選択でスクリプトは中断終了)
repeat --ユーザに検索対象文字列入力を求めるループ開始。
display dialog "検索対象文字列を入力して下さい。" & return & "空欄は不可です。" default answer sss with icon note
set res to result --結果を保存。
set sss to (text returned of result) --ユーザの入力した文字列を取得し、空の文字列かどうか判断。
if sss is not "" then --空の文字列の場合はループを抜けずに、ユーザに再度検索対象文字列入力を求め続ける
exit repeat --有効文字列の場合はループを抜ける。
end if
end repeat
set slist to (every item of fff whose name of it contains sss) -- 検索対象文字列が含まれた項目のリストを取得する。
if slist is not {} then --1つでもヒットしたかどうか。
set slist to name of (every item of fff whose name of it contains sss) -- 検索対象文字列が含まれた項目のファイル・フォルダ名のリストを取得。
choose from list slist with prompt "開く項目を選択して下さい。" with multiple selections allowed
set res to result --結果を保存。
if res is not false then --結果がキャンセルでなければ続行。
repeat with x in res --複数選択時は繰り返す。
if x is not "" then --選択文字列のチェック
open (every item of fff whose name of it is equal to x) --Finderで選択項目を開く。
end if
end repeat
exit repeat --Finderで各選択項目を開き終わったらループを抜ける。
else
exit repeat --結果がキャンセルだったので終了。
end if
else --ヒットしない場合のダイアログ。キャンセルでスクリプト終了。リトライで検索対象文字列の再入力に戻る。
display dialog "検索文字列を含む項目は" & return & "みつかりませんでした。" with icon stop buttons {"キャンセル", "リトライ"} default button "リトライ"
end if
end repeat
end tell
Spotlight使う方法ではないです。
> ※ターミナルを使う方法は使用できません。
とのことですが、シェルスクリプトをAutomaterで実行する方法はいかがでしょうか?
また、
> フォルダの名前は、「クライアント名+日付+若干の詳細」のような感じです。
> 名前順にすると、クライアント名では並びますが、
>「若干の詳細」で検索する必要もあります。
>(例えば、「竣工」と名のついたものだけピックアップしたい、など)
とのことなので、フォルダ名で検索かけられれば足りるのでしょうか?
以上の前提ですと、findコマンドで階層を1に絞ればよさそうです(誤解があったら申し訳ありません)。
以下、コマンド実行例。
--------------- その1 ---------------
[mazgi@iMac.local]$ find . -maxdepth 1 -iname "*英明*"
./徳永英明
./松岡英明
[mazgi@iMac.local]$ [〜/Music/iTunes/iTunes Music 2007/06/27 (水)1:55:34]
--------------- その2 ---------------
[mazgi@iMac.local]$ export WORD=E
[mazgi@iMac.local]$ echo $WORD
E
[mazgi@iMac.local]$ echo $PWD
/Users/mazgi/Music/iTunes/iTunes Music
[mazgi@iMac.local]$ find "$PWD" -maxdepth 1 -iname "$WORD*"
/Users/mazgi/Music/iTunes/iTunes Music/Eels
/Users/mazgi/Music/iTunes/iTunes Music/Eminem
/Users/mazgi/Music/iTunes/iTunes Music/Enigma
[mazgi@iMac.local]$ [〜/Music/iTunes/iTunes Music 2007/06/27 (水)2:08:16]
※えっ?趣味変ですか?
特定の階層にあるものだけ検索対象としたい