ファイル検索

最終更新日時:2008-01-08 13:07:06
自宅サーバへの道

こんなファイルあったかな~とか思った時に、

 % find . -name 'hogehoge' -print


などとやりがちです。
これがディレクトリツリーの下の方での実行なら問題無いんですが、ルートディレクトリだったりすると、まあ、けっこうすごいことになるわけです(^_^;
そこで思いつくのが、夜中かなんかにディレクトリツリーの情報をどこかに保存しておいて、実際に探すときにはそこから持ってくるという方法なのですが、やはりその程度のことは誰でも考えるようで既にそんなツールがあります。
それが slocate です。
例えば、

 % slocate index.html 


とすると、'index.html' という文字列が含まれるファイル名(絶対パス)が全て表示されます。
また、-r を指定すると正規表現を使用することができて非常に便利です。
例えば、

 % slocate -r emacs$ 


とすると、'emacs' という文字が最後に来るようなファイル名が全て表示されます。
実行してみれば分かりますが、find とは比較にならないほど高速です。
ま、ディレクトリツリーの情報のDBを予め作成しているので当たり前ですが。

さて、最初に検索方法を書きましたが、その前に「ディレクトリツリーの情報をどこかに保存しておいて・・・」の部分の準備、つまりディレクトリツリー情報のDBを作成しておく必要があります。
これは、updatedbというコマンドで行います。
ちなみに、ls -l でもしてみれば分かりますが、updatedbは単にslocateへのシンボリックリンクになっています。(つまり実行コマンド名によって動作が変わるわけですね)
slocateは常にある程度新しい状態でファイル検索ができないと意味がないですから、updatedb はcronか何かで定期的に実行するようにしておきます。

ちなみに、locateというコマンドもあり、これも同様の機能を持ちますが、それにユーザーレベルのセキュリティを付けたので slocate (Secure locate) となったようです。

お問い合わせは 掲示板 にて。