読者です 読者をやめる 読者になる 読者になる

あの日,mdfind が見つけたもの

tech macos shellscript

先日の
結局,何も残らなかった,という、またその話w、本当に "空虚" と言う表現以外の何ものでもない,ヨドンダお休みの日を...晒したわけですが.

その中でオモイシッタことのひとつ.

mdfind でディレクトリー名で検索するには,mdfind "kMDItemFSName == '<keyword>' && kMDItemKind == 'フォルダ'" なんだって

-x オプションによって流れるターミナルを眺めながら,以外にも結構負荷があるようなのが find ... | grep ...
見ていて,そしたらせっかくだし,と mdfind を考てみたわけです.

これらは,そんな作業の中でのこと.

ディレクトリーのみを検索対象にするには,query を使わなくてはならない.

最初,find みたく?,指定できるオプションがあるだろうと,と軽く考えていたのでちょっと焦った.

無い.
query というものを使うのかな?

と,まさか使う事になるだろうとは思ってもいなかった query について少し掘ってみることに.

query の構文は attribute == value

左辺のキー,メタデータとかメタデータ属性と言うみたいです,と値,それぞれに半角スペースを入れつつ演算子で結ぶ.

演算子などの詳細は,こちら

メタデータ属性にどのようなものがあるのかを知るには,'mdls' コマンド

ビンゴ! と,こちらから知ったこと.

'mdfind' の "md" に "ls" ってことかしら.

具体的に探したいターゲットがあるならソレを,ボンヤリしていれば似たアイテムを,引数に当て mdls <taget>,こんな感じで enter.
ベロっとリストを出してくれます.
この結果から使うメタデータ属性,そしてヒットさせる値を拾うといいのかな,と思います.

今回の場合,属性は 'kMDItemKind'.
これはいいのですが,値はなんと 'フォルダ'.日本語.
ちょっと信じられなくて,参考までに参照先にあったように 'Folder' を使って検索してみたらエラー.ふーん(笑

query を使ったらアイテムを指定できない

上手く表現できてないですが,こういうのが出来ないみたいなのです.

例です.
例えば,フォルダー名に の文字列を含むアイテムを検索したい,とすると,... ;

mdfind <keyword> "kMDItemKind == 'フォルダ'"

これダメみたいなのです.

じゃぁどうするか.
また別のメタデータ属性でぶつけてやることになります.例を引き継げば,"kMDItemFSName == '<keyword>'" となるわけです.

と次に気になるのが,条件が複数になった場合は,どう繋ぐか,という話です.

query 複数条件は and は "&&",or は "||".

ちょろっと書いてありました.ちょっとけっこー彷徨いました(笑

Queries can be combined using a C-like syntax for AND (&&) and OR (||).

[File Metadata Search Programming Guide File Metadata Query Expression Syntax][31]

ということで,mdfind "kMDItemFSName == '<keyword>' && kMDItemKind == 'フォルダ'" で,名前に という文字列をもつフォルダーを探したい,ということになります.とさ.

おしまい.