No.1330 Re[4]:locateでWindows上の全領域を検索したい |
発言者: nil 発言日: 2003 07/08 21:33 |
結局、find を置き換える適当な実装を紹介できなかったですね。 他の問題も解決できる事を考えると、knabe さんの SJIS用パッチを使 うのがよいのでしょうが、これは一般に勧めるのはちょっと考えてしま いますね。どうでしょ? 意識していなければ、update で気づかずに上書きしてしまう人も少な くなさそうですし。 バイナリ配布が無さそう(?)なのは自己責任で使えるかた向け、という のは勘ぐり過ぎでしょうか。 それで、元のお話が locate が使えるだけでよい、ということならば、 updatedb の代わりに使えるスクリプトを無理矢理作ってみました。 (他に NT版UNIX-like tools の findf.c を修正して、-mno-cygwin で /lib/mingw/CRT_noglob.o をlinkさせればなんとかなります) libiconv, libiconv2 のインストールが必要です。 sort の前後どちらかで EUCから SJISへの変換を行って良いかどうかは テストしてません。 # Windows の検索機能をコマンドライン・インターフェイスで使うよう #なツールってあるのですかね。VB script か何かで組めないのかな? --- updatedb-simple BEGIN #!/bin/sh - # replace simple updatedb # Your config. DIRS='C:\ D:\' #DIRS='C:\tmp' : ${LOCATE_DB=/usr/var/locatedb} : ${LIBEXECDIR=/usr/sbin} : ${frcode=${LIBEXECDIR}/frcode} s2e() { iconv -f CP932 -t eucJP; } e2s() { iconv -f eucJP -t CP932; } #-s2e() { nkf -xed; }; e2s() { nkf -xsd; } findall() { for d; do CMD.EXE /C DIR /B /S "$d"; done | fix2unix; } fix2unix() { s2e | dos2unix | tr '\\' '/'; } #fix2unix() { s2e | dos2unix | sed -e 's@\\@/@g;s@^\(.\):@/cygdrive/\1@'; } xsort() { sort -f | e2s; } #xsort() { e2s | sort -f; } #xsort() { sort -f; } findall $DIRS | xsort | $frcode > $LOCATE_DB.n if [ -s $LOCATE_DB.n ]; then rm -f $LOCATE_DB mv $LOCATE_DB.n $LOCATE_DB else rm -f $LOCATE_DB.n fi exit --- END |
▼関連発言 |