一番単純には CD-ROMの ls-lRをとってgrep することですが、やはり CD-ROMの 枚数が増えると時間もかかるようになります。ところで locate filenameなどとするとシステムに存在するファイルをすばやく見つけ てくれますが、これはあらかじめインデックスを作成しているからです。 この仕組を使います。
インデックスを作成するコマンドは updatedb です。夜中にディスクが突然ガチャ ガチャ動きだして不審になって top してみた人もいると思いますがその実体です。 これらは slackware なら標準で入っていると思います。
updatedb --localpaths=/cdrom/ --output=cdrom-index-filecdromの後にスラッシュを付けるのが秘訣(?)です。
$ locater filenameとします。出力形式は改善の余地ありです。
#!/bin/sh
# filename: locater
case $1 in
-l) OPT_L=ON
shift
;;
esac
TARGET=$1
trap 'rm -f /tmp/locater.$$; exit 1' 1 2 15
for i in $HOME/locatedbs/*
do
locate -d $i $TARGET >/tmp/locater.$$ 2> /dev/null
case $? in
0) echo
echo $i
if [ ! "x$OPT_L" = "xON" ] ; then
cat /tmp/locater.$$
fi
;;
*)
;;
esac
done
rm /tmp/locater.$$