特定の文字列を含むファイルを探す方法をメモしました。
grepコマンド
を使います。
参考記事
ファイル名のみ表示
指定したディレクトリ以下を再帰的に検索し、検索対象の文字列が存在するファイル名を表示します。
$ grep -ril "文字列" ディレクトリのパス
- git_testディレクトリ内にある"first"を含むファイルを検索した結果
$ grep -ril "first" git_test
git_test/test_01.txt
git_test/test_02.txt
git_test/testdir/test_03.txt
git_test/testdir/test_04.txt
ファイル名と該当行を表示
指定したディレクトリ以下を再帰的に検索し、検索対象の文字列が存在するファイル名と該当行を表示します。
$ grep -rin "文字列" ディレクトリのパス
- git_testディレクトリ内にある"first"を含むファイルを検索した結果
$ grep -rin "first" git_test
git_test/test_01.txt:3:first
git_test/test_02.txt:3:first
git_test/testdir/test_03.txt:3:first
git_test/testdir/test_04.txt:3:first
今回使用したオプション
-r(--recursive)
サブディレクトリ内も含めて(再帰的に)検索する。
-i(--ignore-case)
大文字・小文字を区別しない。
-l(--files-with-matches)
検索結果にファイル名のみ表示する。
-n(--line-number)
行番号を表示する。
fgrepコマンド
今回はgrep
を使用しましたが、正規表現を使用しなければfgrep
で高速検索ができるそうです。
拡張子を指定した絞り込み
- 平成30年12月12日追記
以下の書き方で、特定の文字列を含むtxtファイルの名前のみを表示する事ができます。
探したいファイルの拡張子がハッキリしている場合は便利です。
$ find ディレクトリのパス -name "*.txt" | xargs grep -l "文字列"