• このエントリーをはてなブックマークに追加

【linux】あるディレクトリ配下の複数ファイルから特定キーワードを検索(find)

  • このエントリーをはてなブックマークに追加

こんばんは。
GW満喫中のzaco muraです。

背景

初めて使うサーバアプリケーションなどでうまく動かない時やデバッグしたいときに、ある文字列が含まれるファイルを探したい、って時があります。
そんな時には grep で探します(たいていは 『*』を駆使して検索するかと思います)が、ディレクトリ構造がわからない時などは、うまくいかない時があります。

そんな時に、役立つのがコレ。「うまく使いこなせれば便利そうだけど、あんまりよく知らないコマンド」No.1こと、findコマンドです。(当社調べ)

使い方

で、本題の使い方を説明します。
(例として、/var/www/html/blog/ 配下のファイルから”hogehoge”という記述があるファイルを探します。)

~$ find ./var/www/html/blog/ -type f -exec grep -l hogehoge {} \;
./var/www/html/blog//POST12/contents/content.txt
./var/www/html/blog//POST17/comment/comment.txt
### 解説
# find ./var/www/html/blog  <= 検索したいディレクトリ
# -type f  <= ファイルだけを指定(ディレクトリは除外)
# -exec    <= findでひっかかったファイル(つまり、./var/www/html/blog配下のファイル全て)に対してコマンドを実行
# grep -lF hogehoge {}  <= ここは普通のgrep コマンド。{} にはfindでヒットしたファイル名が入る
# ¥; <= -exec で実行するコマンドを閉じる

その他

なお、grep の -l オプションは、文字列があるファイル名を表示するオプションです。これを付けないと、ヒットした行が表示されるだけで、どのファイルかわからないのでつけてます。

findコマンドは文法とか独自の雰囲気があってややこしいイメージですが、使いこなせるとすごく便利そうだなーと思っています。(自分もまだ使いこなせてはいない)

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link