目次
目的
- Windows上に存在する全ての「~.java」ファイルをリストアップ。
- 上記の内「System.out.println」が含まれているファイルを見つける。
環境
Windows10
使用アプリ、コマンド
以下二つを新規インストールします。
「Everything.exe」デスクトップアプリ
ファイル名をインデックス化 & 検索するデスクトップアプリ。手軽に使えて便利ですが、「Everything -s “検索したいファイル名”」のようにコマンドラインオプションを付けてもGUIが起動してしまう為、スクリプト上では使えません。
「es.exe」コマンド
Everything.exeが作成したインデックスに対してコマンドラインで検索を掛けることが出来ます。スクリプト化して自動化する際はこちらも併せてインストールします。
インストール
公式ダウンロードサイト。
「Everything.exe」 インストール
上記サイトから最新msiファイルをダウンロード。
msiを実行すると「C:\Program Files\Everything」にEverything.exeがインストールされる。
「es.exe」インストール
同サイトから最新zipをダウンロード。
解凍したディレクトリを適当なディレクトリに配置、PATH環境変数に追加。
以上でインストールは完了です。
ファイル名検索
「Everything.exe」による検索
Everything.exe起動。
「検索」→「正規表現で検索」にチェックを入れる。
「\.java$」を入力して拡張子javaのファイルをリストアップ。
Windows OS内の全ての~.javaファイルパスがリストアップされました。
「es.exe」による検索
cmd.exeを起動して、es [検索したいファイル名]。
C:\Users\naka> es -r "\.java$"
C:\opt\~\manager\org\apache\jsp\WEB_002dINF\jsp\_401_jsp.java
C:\Users\~\gradle-4.1\samples\java-library\with-groovy\a\src\main\java\A.java
C:\Users\~\android-25\com\android\settingslib\bluetooth\A2dpProfile.java
C:\Users\~\android-25\com\android\settingslib\bluetooth\A2dpSinkProfile.java
C:\Users\~\org\h2\build\code\AbbaDetect.java
:
(snip)
Windows OS内の全ての~.javaファイルパスがリストアップされました。
全文検索
Everything自体は全文検索機能を持っていません。
esの結果を一行ずつ、powershellの「Select-String (sls)」コマンドに食わせます。
sls、%{}はUNIXのgrep、xargsコマンドと同様の効果を持ちます。
C:\Users\naka>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\naka> es -r "\.java$" | %{ sls System.out.println $_ }
C:\Users\naka\Desktop\h2\src\main\org\h2\util\AbbaDetector.java:71: System.out.println(thread + " " + indent +
C:\Users\naka\Desktop\h2\src\main\org\h2\util\AbbaLockingDetector.java:164: System.out.println(topLock + " synchronized after\n " + olderLock
:
(snip)
Windows OS内の全てのjavaファイルの中から「System.out.println」文字列を含むjavaファイルがリストアップされました。
インデックス更新
Everythingサービスが常駐している場合(msiインストールすると自動で常駐する)、ファイルを作成した時点でファイル名インデクシングされます。手動で更新する必要はありません。
まとめ
Everythingデスクトップアプリとesコマンドがあれば、 遅いエクスプローラの検索窓に辟易することが無くなります。