SQL文でファイル検索が出来るGO製のコマンドラインツール「fsql」の紹介です。
普段PCを使っていて、" コマンドライン上からファイルを検索 " をする機会は少ないですが、
SSHなどでサーバーにリモートアクセスし、CLI上で操作する時には よくある事の1つです。
Unix系OSで コマンドライン上でファイルを検索するには " find
"コマンドが用意されていますが、
細かな条件をつけて検索となると 少々慣れが必要です。
( * fgrepや除外パスなど )
# findコマンドを使ったファイル検索の例
find projectFolder -type f -name "*.json" ! -path "node_modules"
findをコマンドを使わない場合は ' cd DIR名
ls
pwd
'のコマンドを使い回して
ファイルを探している人も多いのではないでしょうか。
そんなファイル探しを データベースをお使いの人には お馴染みの
SQL構文で検索できるコマンドラインツールが「fsql
」です。

・SQL構文でファイルの検索が出来る
fsqlはGO言語で作成されており、パッケージとして提供されているので、
インストールにはコマンドライン上から ' go get
' コマンドを使ってインストールします。
# go getを使ってインストールする場合
$ go get -v github.com/kshvmdn/fsql
# 正しくインストールされていると'fsql'コマンドが使えるようになります
$ fsql
Expected query.
fsqlの使い方は簡単で ' fsql "SQLクエリ"
' で使うことができます。
下のスニペットはfsqlを使った最低限の使い方で、
カレントディレクトリ直下
で ファイル名が".json
"で終わるファイルを検索しています。
# LIKE文を使って .jsonで終わるファイルを検索
fsql "SELECT * FROM . WHERE name LIKE '%.json'"
# ファイル名が決まっている場合 *実行結果はファイル名とサイズを返す
# fsql "SELECT name, size FROM . WHERE name = package.json"
# fsqlが持っているデータ属性
name : ファイル名
size : ファイルのサイズ
mode : ファイルのパーミッション
time : ファイルの作成日時
json
'ファイルを検索した実行結果 
上の実行結果の画像を見たとおり、上記の'json
'ファイルで検索すると、
jsonファイル全てにヒットするので、目当てのファイルを探すのも一苦労です。
そういう時の為に fsqlには指定したファイルを検索から除外するオプション
も用意されています。
# 'node_modules' と 'vendor'ディレクトリを検索から除外して'json'ファイルを検索
fsql "SELECT * FROM . , -node_module, -vendor WHERE name LIKE '%.json'"

その他にも AND
検索で条件を増やしたり、ファイルサイズの比較演算
、正規表現
も使用可能です。
# sizeを指定して '.python'で終わるファイルを検索する例
fsql "SELECT * FROM . WHERE name LIKE '%.python' AND (size >= 10.5kb OR size < 100)"
# 用意されているオペレーター
WHERE / LIKE / RLIKE / AND / OR / NOT / IS
# 比較演算
> >= < <= = <>
以上が fsql の紹介でした。
実際に自身の環境(Mac)に入れて使ってみましたが、
特に開発でデータベースを普段から使っている(SQLに慣れている) プログラマーさんは
直感的に使えるコマンドラインツールだと感じました。
サーバーに fsql を導入しておくと役に立つ場面も多いと思うので、
気になった人はゼヒ×2チェックしてみてください!
GitHub : kshvmdn/fsql