Windowsでファイルを検索するときにあまりの遅さに辟易とすることが多々ある。
そういうときに思い出すのがLinuxのlocate。
ということで探してみた。
あった。
Win32 Locate and Updatedb Scripts。
若干順序が逆になったような気もするがlocateってなにっていう人のために簡単に説明を。
locateってのはあらかじめインデックスを張っておくことによってファイルを高速に検索するプログラム。
どのくらい高速かというと、70万個のファイルの中から特定のファイルを探し出すのに1秒かからないくらい高速。(実際に自分のマシンで試したっていう)
ただし、「あらかじめ」というところがみそで、事前にインデックスを張る作業が必要。
それをおこなうのがupdatedb。
で、検索はupdatedbによって構築されたインデックスから検索するので、updatedbの最終実行時以降に新規にファイルが追加されたり移動・削除等々が発生してからlocateで検索すると、誤った検索結果がはじき返されることになるので、その点は注意。
locateとupdatedbは、初回インストール時にまずupdatedbで索引データベースを作成、以降は毎日cron.dailyからupdatedbをはじいて索引を更新っていうのがLinuxでの通常運用だろう。
Windowsだと一応cronの代わりにタスクスケジューラがあるんでそれを使う感じか。
んで、WinLocateの使い方。
アーカイブを展開するとご丁寧にバッチ形式ながらインストーラ付きだった。
正直個人的にはこういうのはいらないんだけども作者は親切心からのことなのだろうから従うことにする。
Install.iniでインストール先のフォルダの指定をして、Install.batをはじくとInstall.iniで指定したフォルダ以下にWin32Locateというフォルダを作成して、そこにファイルを配置するということのようだ。
古いバージョンがすでにある場合は掃除もしてくれるらしい。
デフォルトだとInstall.iniにはC:Program Filesが記述されている。
ちなみにインストール時にロシア語か英語のどっちにするか聞かれる。
Install.batでインストールすると指定先のフォルダにWin32Locateフォルダが生まれていて、そこにLocate.batとUpdatedb.batが生まれている。(実際のところは単にコピーしてるだけなはず)
んで、幸せな運用をするなら、インストール先のフォルダにPATHを通す。
マイコンピュータ->プロパティ->詳細設定->環境変数->システム環境変数->PATHの値を。。。あれ、入ってる。
なるほどなるほどこのためのInstall.batか。
ということでインデックスを構築する。
コマンドプロンプトからupdatedbとたたくと以下のような感じで表示される。
C:>updatedb Updatedb v0.1.4, by Piroi Ninel <ninix20@gmail.com> - 14/May/2010 Use this tool to index available storage units files for faster find. To search into database use "Locate.bat" script. Command help: 'Updatedb -a' - For indexing all available storage units in the system 'Updatedb c: k:' - Indexing file structure for C: and K: units 'Updatedb -r' - Indexing new units and whose database is older than one mo nth 'Updatedb -d' - Complete remove database 'Updatedb -d z: y:' - Delete drive Z: and Y: from database 'Updatedb -n' - Remove all units that are no longer connected to the compu ter 'Updatedb -i' - Show details about database 'Updatedb -m' - Menu interface 'Updatedb -h' - Show this message 'Updatedb -u' - Uninstall WinLocate Available units: c: d: f: j: z: Do you want to index all storage units: [Yes/Select/Cancel]?
インデックスを張りたくないドライブも含まれているのでSelect。
CとDに張りたい。
Enter drives exactly as above without quote Please select units for indexing: c: d: ---=[ Process begins at (23:39:53.69) ]=--- This will take few minutes depending on the number of storage units you choice and how many files contains each of them! Indexing drive 'C:'... [$Recycle.Bin - 422716 files] Indexing drive 'D:'... [$RECYCLE.BIN - 283289 files] Full database: 'PC'... [HYDRANGEA - 706005 total files] ---=[ Process finish at (23:40:03.68) ]=---
なんかさっくりと構築完了。
んで、あとはタスクスケジューラにupdatedbを登録すればいい。
自分の場合は
updatedb c: d:
を登録することになる。
ところで、タスクスケジューラに登録してるときに思ったんだけど、「新しい操作」画面の「開始 (オプション)(T)」って何。
引数の追加はわかるけど。
あとついでに基本タスクとタスクの違いがヘルプを見ても全くわからない。
いじってみた感じ基本タスクの作成よりもタスクの作成の方が細かく設定できるような感じはしたけど。
ああ、全般タブの構成のところもよくわからない。
デフォルトだとVista, 2008になってた。
よくわからないけど何となく7, 2008 R2にしておいた。
いろいろと謎めいている。