目的
- CentOS上に存在する全ての「~.java」ファイルをリストアップします。
- 上記の内「System.out.println」が含まれているファイルを見つけます。
環境
CentOS7.5
使用コマンド
locate [探したいファイル名]
インデックス検索出来るlocateコマンドを使うことでfindコマンドよりも高速に検索します。
ファイル名検索
拡張子「java」のファイルをリストアップする為、-rで正規表現を使います。
$ locate -r "\.java$"
/etc/.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/footer_jsp.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/index_jsp.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/searchOptions_jsp.java
:
(snip)
OS内の全ての~.javaファイルパスがリストアップされました。
全文検索
リストアップされた結果をxargsコマンドで一行ずつgrepに渡してやります。
$ locate -r "\.java$" | xargs grep System.out.println
grep: /etc/.java: ディレクトリです
/usr/share/~/VerifyRSAOAEPSHA2.java: System.out.println("Exception closing files");
/usr/share/~/VerifyRSAOAEPSHA2.java: System.out.println("Verifying OAEP with mgf1_hash: " + m_mgf1_hash + " alg_hash: " + m_alg_hash + " - "
/usr/share/~/VerifyRSAOAEPSHA2.java: System.out.println("Vector file path: " + vector_path);
:
(snip)
全ての~.javaファイルの中から「System.out.println」文字列を含むjavaファイルがリストアップされました。
補足とインデックス更新
CentOSのminimalインストールではlocateコマンドは初期インストールされていないのでインストールする必要があります。パッケージ名は「mlocate」です。
# yum install mlocate
インストールしたての時はインデックスDBが出来ておらず、locateすると以下のエラーが発生します。
locate: stat () `'/var/lib/mlocate/mlocate.db' できません: そのようなファイルやディレクトリはありません
その場合は以下のコマンドでインデックスDBを作成してください。(最初の一回は時間が掛かります)
# updatedb
mlocateインストール後は以下の/etc/cron.daily/mlocateがインストールされ、一日一回、自動的にupdatedbが走るようになります。
# cat /etc/cron.daily/mlocate
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' < /proc/filesystems)
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
まとめ
cron.dailyで毎日updatedbされるとは言え、直近に作成したファイルはインデックスされておらず結果に出ません。必ずupdatedbを実行してからにするか、findと併用するのが有用です。
find ./ -type f -name "*.java" | xargs grep System.out.println