ファイルパスを検索し結果をJSONで返すサーバーを立て、ブラウザに表示するファイルを配信します。
ウェブブラウザからの入力で指定ディレクトリ下にあるファイル内の文字列に対してlocateコマンドを使用した正規表現検索を行い、結果をhtmlにしてウェブブラウザに表示します。
- mlocate
- gocate
Windows, Linux OK
MacOS 未テスト
Usage of ./locate-server:
-d string
Path of locate database directory (default "/var/lib/mlocate")
-debug
Debug mode
-dir string
Path of locate database directory (default "/var/lib/mlocate")
-p string
Server port number. Default access to http://localhost:8080/ (default "8080")
-port string
Server port number. Default access to http://localhost:8080/ (default "8080")
-r string
DB insert prefix for directory path
-root string
DB insert prefix for directory path
-s OS path split windows backslash
-t string
DB trim prefix for directory path
-trim string
DB trim prefix for directory path
-v show version
-version
show version
-windows-path-separate
OS path separate windows backslash
$ locate-server \
-d /home/mydir/mlocate \
-windows-path-separate \
-trim '\\gr.jp\share' \
$ go install github.com/u1and0/locate-server@latest
or use docker
$ docker pull u1and0/locate-server
locate-server実行時にglibcが必要
./locate-server: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./locate-server)
cgoを無効にしてビルドすれば解決。
CGO_ENABLED=0 go build
$ go test
- 検索ワードを指定して検索を押すかEnterキーを押すと共有フォルダ内のファイルを高速に検索します。
- 対象文字列は2文字以上の文字列を指定してください。
- 英字 大文字/小文字は無視します。
- 全角/半角スペースで区切ると0文字以上の正規表現(.*)に変換して検索されます。(AND検索)
(aaa|bbb)のグループ化表現が使えます。(OR検索)- 例: golang (pdf|txt) => golang及びpdf並びにgolang及びtxtを検索します。
- [a-zA-Z0-9]の正規表現が使えます。
- 例: file[xy] txt でfilex及びtxt並びに*とfiley及びtxt** を検索します。
- 例: file[x-z] txt でfilex及びtxt並びにfiley及びtxtとfilez.txt を検索します。
- 例: 201[6-9]S => 2016S, 2017S, 2018S, 2019Sを検索します。
- 0文字か1文字の正規表現
?が使えます。- 例: jpe?g => jpeg と jpgを検索します。
- 単語の頭に半角ハイフン"-"をつけるとその単語を含まないファイルを検索します。(NOT検索)
- 例: gobook txt -doc=>gobookとtxtを含みdocを含まないファイルを検索します。
- AND検索は順序を守って検索をかけますが、NOT検索は順序は問わずに除外します。
- 例: gobook txt -doc とtxt gobook -doc は異なる検索結果ですが、 gobook txt -doc とgobook -doc txtは同じ検索結果になります。
- ファイル拡張子を指定するときは、文字列の最後を表す**$**記号を行末につけます。
- 例: **gobook pdf$ **=>gobookを含み、pdfが行末につくファイルを検索します。
- 検索結果はリンク付で最大1000件まで表示します。(v2.X.Xまで)
- リンクをクリックするとファイルが開きます。
- << マークあるいはフォルダアイコンをクリックするとそのファイルがあるフォルダが開きます。
ページタイトルに検索ワードが付属するので、ブラウザの戻るを長押ししたときに検索履歴が表示されます。
ブックマークすることで、ワンクリックで検索を開始し、結果を表示できます。
検索バーのURLは他人に送付することができます。 URLを送られた人はリンクをクリックするだけで検索バーに入力した文字列で検索を開始し、結果を閲覧することができます。
検索ツールボックスにはこれまで検索した検索語を検索候補として表示します。
| 説明 | メソッド | URI | パラメータ | パラメータ例 |
|---|---|---|---|---|
| ファイルパスの検索結果をJSONで返す | GET | /json | q=, logging= | http://localhost:8080/json?q=keyword http://localhost:8080/json?q=keyword&logging=false loggingの値はboolian, falseのとき、検索キーワードを履歴に残さない |
| ファイルパスの検索結果をHTMLで表示する | GET | /search | q=, logging= | http://localhost:8080/json?q=keyword http://localhost:8080/json?q=keyword&logging=false loggingの値はboolian, falseのとき、検索キーワードを履歴に残さない |
| 検索履歴を見る | GET | /history | gt=, lt= | http://localhost:8080/history?gt=10<=1000 10以上、1000未満のスコアの履歴のみJSONで返す |
| DBの状態確認 | GET | /status | なし | http://localhost:8080/status ステータス表示 |
インターネット設定からhttp://(ホストマシンのIPアドレス)を信頼するサイトに追加します。
参考: MS11-057 KB2559049 更新後 file://プロトコルでリンクしている共有ファイルが開けない
拡張機能を追加します。
"GoogleChromeでリンクをクリックしてもファイルが開かない現象について" を参照してください。
アドオンを追加します。
Dockerコンテナによるシステム構成
docker create --name db -v /var/lib/mlocate -v /ShareUsers:/ShareUsers:ro busybox
このコマンドではdbコンテナの/varlib/mlocateを外部に晒して、
ホストのShareUsersをdbコンテナにマウントする。
ShareUsersがlocateコマンドをかける対象のディレクトリ。
docker run --name app\
--volumes-from db\
-e UPDATEDB_PATH=/ShareUsers/<path to the db root>\
-e OUTPUT=mlocatepersonal.db\
u1and0/upadtedb
このコマンドではdbコンテナのボリュームを参照し、
updatedbをかけるパスをUPDATEDB_PATHで指定している。
dbでマウントしているのでこのコンテナで再度マウントする必要はない。
環境変数OUTPUTは出力するファイル名を指定する。
ディレクトリは/var/lib/mlocateに固定される。
docker run --name web --volumes-from db u1and0/locate-server [OPTIONS]
docker run --name web --rm -t\
--volumes-from db\
-e TZ='Asia/Tokyo'\
-e LOCATE_PATH='/var/lib/mlocate/mlocatepersonal.db:/var/lib/mlocate/mlocatecommon.db'\
-p 8081:8080\
u1and0/locate-server -s -r '\\DFS' # オプションのみ
TZを指定しないとDBの更新日時がGMTになってしまう。
LOCATE_PATHはappコンテナで指定したパスの数だけ:で区切って記述する。
u1and0/locate-serverコンテナはENTRYPOINTで動くのでコンテナの指定後はオプションのみを記述する。
$ docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' web
TZ=Asia/Tokyo
LOCATE_PATH=/var/lib/mlocate/mlocatepersonal.db:/var/lib/mlocate/mlocatecommon.db:/var/lib/mlocate/mlocatecommunication.db
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG=C.UTF-8
- updatedbするコンテナを作成
docker run --name personal --volumes-from db\
-e TZ='Asia/Tokyo'\
-e UPDATEDB_PATH=/ShareUsers/UserTokki/Personal\
-e OUTPUT=mlocatepersonal.db\
-d u1and0/updatedb
- locate-server実行コンテナに対して、環境変数
LOCATE_PATHの内容を変更したものを再度作成( run )する 2.1.docker stop web2.2.docker rename web web_old# 今まで使っていたコンテナを退避(バックアップ) 2.3. 新しい環境変数を設定したコンテナをrun `docker run ... -e LOCATE_PATH="..."``
既知のバグ報告。
内部的にString.ReplaceAll()を使用しているため。
