ファイルのランダム検索

やりたいこと
「コンピュータ内にある全てのpdfを検索して、それらのうち、N個のファイルをランダムに引っ張って来て、ストレスなく表示したい。環境はMac。」
目的
「タグ付けなどにより、ファイルがコンピューター内のどこにあるかは問題ではなくなるが、どのようなタグをつけているかをきちんと把握しておく必要がある。また、データベースなどを活用すればやはり非常に整った形で整理することが出来るが、保存してある情報が多くなればなるほど見返すのが大変になる。結局、頭でどれだけ把握しているかが大事という結論も散見されるが、一度忘れてしまった繋がりを捨ててしまうのはもったいない。情報の繋がりを忘れないためにはor繋がりを増やすためにはランダムに様々な情報に触ることが良いと思われる。」

先に結論
「SpotlightをTerminalから実行。mdfind kind:pdf >temp.txtとする。temp.txtをRubyなどでいじれば良し。」

やったこと
以下、思いついたままに特に整理せずに書く。
Macのウリの一つにSpotlightがある。Google Desktopのもうちょい良い奴と言えば良いか(時系列で言ったらSpotlightのが先だけど)。このSpotlightで「kind:pdf」のように打ち込むと、Mac内にあるpdfファイルを全部探して来てくれるので、この機能を使うと良い気がする。
ランダムに選ぶという時にすぐに思いついたのはiTunesiTunesではpdfも扱うことが出来るのでさっそくやってみた。kind:pdfでファイルを全部持って来て、それをiTunesのライブラリに入れた。そして全pdfからなるプレイリストを作って、シャッフルのボタンを押す。これで上N個を見れば、やりたいことはほとんど出来た気がする。
ここで問題になるのは、iTunesだとプレビュー機能もなければQuickLookも使えないということ。ダブルクリックしていちいちプレビューを起動しなければ中身を読むことができない。これはちょっと不便。次善策としては、シャッフルボタンを押してから、上Nコのファイルを適当なフォルダまでドラッグアンドドロップするとpdfをそこにコピー出来るので、この機能を使うということが挙げられる。この形になれば、QuickLookは使えるし、便利だ。一応やりたいことは実現出来たのだけど、問題点は

  • ちょっとめんどくさい(無意味に一手間か二手間ほど多い気がする)
  • コピーをするのがちょっとスマートじゃない気がする(まぁ最近のHDDは多いから問題にはならないと思うけど)
  • iTunesがpdfがちらかってしまっているような印象があって、ちょっと嬉しく無い。 というか、何か格好悪い。

あたり。メリットを挙げるとすれば、

  • 全pdfのプレイリストをいじることができる。
  • iTunesのレーティングや、タグ付けソフト*1を利用できる。

というところ。
次に思いついたのは、Spotlightの検索結果をどうにかしてこねくりまわせないかということ。試しに保存してみると、pdf.savedSearchのようなフォルダ的なファイルが出来る。これはFinder上ではほとんどフォルダのように使えるので便利だし、ドックに追加することも出来るので工夫次第では色々使える。しかし、.savedSearchファイル自体には検索結果のファイル名などは含まれていないので、これを用いてのランダムにファイルを選ぶことはできない。RubyのDir::globメソッドを使えば何かできそうだと思い、ターミナルからpdf.savedSearchに対してcdしようとすると、
$ cd pdf.savedSearch
bash: cd: pdf.savedSearch: Not a directory
と言って怒られる。困った。こいつは結局のところ検索クエリのファイルであってフォルダではないらしい。
じゃあいっそのことRubyで検索からやってしまおうと思い立った(←いまここ)。ただ、これはおそらくSpotlightに比べるとおそろしく非効率的で時間がかかりそうなので、やってない。というか、そもそもどうやってやればいいのだろう。
はて。そもそも結果をどのような形にするかを細かく考えていなかった。QuickLookを使うためには結局コピーしなくちゃいけないような気もしたけど、シンボリックリンクをQuickLookで見ることが出来るので、検索結果はシンボリックリンクをN個返す形にすれば良いと思われる。
それと、pdfを全部合わせても今の所高々数GBなので、all_pdfのようなフォルダを作り、そこをSpotlightの検索範囲から外して、そこにkind:pdfの結果を全てコピーしてしまえば良い気がする。そして、all_pdf内でDir::globしてから、適当に乱数を発生させてN個ツモってくると。となると問題はあとRubyシンボリックリンクを作れるかどうかだけども、これは`UNIX command`のように抜けることが出来るからなんとかなると思う。
そもそもFinderの表示の仕方に「シャッフル表示のようなもの」があれば何の苦労もせずに済むのだけれど…。ちょっとぐぐったのだけれど、それっぽいものは出てこない。同じようなことを考えている人がいると思うんだけどなぁ。

      • -

と書いた所で、aquavitよりmdfindを使うと良いのではないかというコメントを貰った。確かに。Spotlightを標準入出力で扱えれば何の問題も無いのだ。
$ mdfind kinf:pdf > temp.txt
のようにして、これをRubyなりなんなりで触れば良いだろう。

*1:多分、一般のタグ付けソフトよりも種類は多いと思う。