ファイル検索コマンド locate の出力をハイパーテキスト化する wlocate

locate コマンド

Linux でファイル名からファイルの所在を見付けるのに最も便利なのは locate コマンドです。locate コマンドを利用するためには、インデックスが作成されている必要があります。インデックス作成には updatedb コマンドが使われます。24時間稼働しているサーバーでは updatedb は自動的に深夜に実行されるようですが、デスクトップとしてLinux を使っている場合は root アカウントで時々 updatedb を起動する必要があります。大体、次のような手順になります。

$ su

Password: (root アカウントのパスワードを入力) 
# updatedb &
[1] 13912
# exit

$ locate .pm

上のように locate .pm と入力すると ディスクの中の Perl モジュールのリストを即座に表示してくれます。

locate の出力をハイパーリンクにする wlocate

locate コマンドだけでも、十分強力ですが、これを、wgrep のときと同じようにハイパーリンクにしようと思います。まず、locate の出力をHTML形式にするスクリプト locf.pl を作ります。

ファイル名:locf.pl

#!/usr/bin/perl

while (<>) {
	chop;
	print "<a href=\"$_\">$_</a><br>\n";
}

次に locate の出力をハイパーリンクにするスクリプト wlocate を作成します。

ファイル名:wlocate

#!/bin/sh
exec locate $@ | locf.pl | w3m -T text/html

locf.pl と wlocate のパーミッションを実行可能にします。

$ chmod +x locf.pl wlocate

準備が整ったところで、コンソールから wlocate を使ってみましょう。

$ wlocate .pm

lynx を利用 llocate

lynx を使った llocate も作れます。

ファイル名:llocate

#!/bin/sh
locate $@ | locf.pl > ~/.locf.html
exec lynx ~/.locf.html

追記:wlocate + grep ができます。

wlocate で出力されるリストが長過ぎて grep でフィルターしたいときがあります。そんなときは locf.pl を単体で使って下のようにすることができます。

$ locate php | grep manual.html | locf.pl | w3m -T text/html

sed で作る wlocate

wlocate は sed でも書くことができます。かなりコンパクトに書けます。

#!/bin/sh

locate $@ | sed 's/^.*$/<a href="&">&<\/a><br>/' | w3m -T text/html

wlocate で ruby のファイルが開けなかったとき

wlocate は便利ですが、*.rb のような Ruby のファイルは開けずにダウンロードになってしまいます。Control-g でキャンセルできますが、Ruby のファイルを読めないと不便で仕方がありません。これは *.rb ファイルの MIME タイプが application/x-ruby になっているからです。

そこで、~/.w3m ディレクトリに次のような設定ファイル mime.types を作成したところ、 *.rb ファイルの MIME タイプを text/x-ruby に変更して w3m で表示できるようになりました。

~$ cd .w3m
~/.w3m$ cat mime.types
text/x-ruby	rb 
text/x-javascript	js

上のファイルでデリミタはタブを使っています。ついでに JavaScript のファイルも読めるようにしています。これで wlocate の弱点はなくなりました。

locate の結果を grep できるようにした

wlocate のソースを編集して

$ locate .rb | grep home | wlocate

というように、間に grep を挟むことができるようにしました。次がそのソースです。

#!/bin/sh

if [ $# -ne 0 ]; then
  locate $@ | sed 's/^.*$/<a href="&">&<\/a><br>/' | w3m -T text/html
else
  sed 's/^.*$/<a href="&">&<\/a><br>/' | w3m -T text/html
fi

Lynx のキーマップにする

リンクのナビゲーションは w3m オリジナルのものより lynx 風のキーマッピングが便利です。リンクの移動は上下矢印で、右矢印でリンクを辿ります。もとのベージには左矢印で戻れます。ページ内のカーソルの移動は vi 風に h, j, k, l キーで行います。

キーマップを変更するのは、/usr/share/doc/w3m/ja/keymap.lynx を ~/.w3m/ ディレクトリにコピーするだけです。