- PR -

ある文字列を含むファイルを探す方法

1
投稿者投稿内容
横山
常連さん
会議室デビュー日: 2003/08/25
投稿数: 33
投稿日時: 2003-11-25 14:10
横山と申します。

あるディレクトリ配下(その下のディレクトリ内も含む)のファイルの中で
『ある文字列を含むファイル』を検索する方法がわかりません。

あるディレクトリ内(その下のディレクトリ内を含まない)のファイルから
「word」を含むファイルを検索する場合は、

grep word /home/somebody/*

などとすると/home/somebody配下のファイルを検索し、検索結果として、
「一致したファイル名」と「一致した一行」が表示されます。

これを『その下のディレクトリを含む』形で検索する場合は、

find /home/somebody/ -type f -exec grep word {} \;

などとすれば良いと考えたのですが、
上のfind文では「一致したファイル名」が出力されず、
「一致した一行」のみ出力されてしまいました。

「一致したファイル名」と「一致した一行」の両方を出力するには
どうしたらよいのでしょうか?

ご存知の方がいらっしゃれば教えていただきたいと思います。
宜しくお願いします。
KaNi
常連さん
会議室デビュー日: 2003/06/04
投稿数: 36
お住まい・勤務地: 埼玉県
投稿日時: 2003-11-25 14:57
どもです。

xargs を使って

find /home/somebody/ -type f -print | xargs grep word

てのはどうでしょう?
または、

find /home/somebody/ -type f -exec grep word {} \; -exec echo {} \;

なんてベタベタな手が・・・。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-25 15:48
「特定の文字列を含むファイル名」が欲しいんですよね?
それでしたら、grepの返り値をチェックしないといけないのではないでしょうか。
コード:
for i in `find /path/to/dir/ -type f | xargs`;
do
    if [ "`grep word_to_find $i | wc -l`" -ne "0" ]; then
        echo $i;
    fi;
done


ってな感じでどうでしょう。grep結果の行数をwc -lで求めるというちょっと回りくどいやり方ですが、一応私の持ってるLinux(VineLinux 2.5CR + updates)ではうまく動くようですよ。
とんび
常連さん
会議室デビュー日: 2003/07/11
投稿数: 32
投稿日時: 2003-11-25 15:55
-rで再帰的に検索してくれると思うんですが、それではだめなんでしょうか?
横山
常連さん
会議室デビュー日: 2003/08/25
投稿数: 33
投稿日時: 2003-11-25 16:57
横山です。

KaNiさん、おばけさん、とんびさん、お返事ありがとうございます。

「-r」指定で無事求めていた結果が得られました。
(盲点でした・・・)

ありがとうございました。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2003-11-25 20:22
すでに解決されているようですが...
> 「一致したファイル名」と「一致した一行」の両方を出力する
ということに対しては常套手段があります。
find /home/somebody -print | xargs grep word /dev/null
です。最後の /dev/null がポイント。
必ずしも /dev/null じゃなくてもいいんですが。
1

スキルアップ/キャリアアップ(JOB@IT)