- ベストアンサー
すべてのファイルに対してgrepをかける方法を教えてください。
/(ルート)配下にあるすべてのディレクトリ(サブディレクトリ)配下のファイルに対して、'test'という文字列が入っているかどうかを調べたいと思っています。 サブディレクトリは何階層にもなっており、存在するすべてのファイルに対して検索をかけたいと思っています。 以上のような場合にどのようにgrepを使用すればよいのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
コメントが付かないようなので・・・ > ためしてみたところ > ? > と表示され、 行末のセミコロン(;)を忘れていませんか? 僕のを見やすいようにすべて全角で書くと以下になります。 find / -type f -exec grep test {} /dev/null ¥; これを実際には半角で入力してください。
その他の回答 (4)
- foobar
- ベストアンサー率44% (1423/3185)
#4最終行訂正 誤:(ls -R / | grep -v / | exec test /dev/null の方がいいかな) 正:(ls -R / | grep -v / | exec grep test /dev/null の方がいいかな) 肝心の grep が落ちてました・・・
- foobar
- ベストアンサー率44% (1423/3185)
grep の再帰オプション (-r)やfindを使う以外の方法では ls の再帰オプション (-R) を使って、 ls -R / | exec grep test /dev/null のような手もあるかと思います。 (ls -R / | grep -v / | exec test /dev/null の方がいいかな)
お礼
回答ありがとうございます。 ls -Rを使う手もあるのですね。 今回はfindが使えたのでfindで実行しました。
こっちの方がいいかな? find / -type f -exec grep test {} /dev/null \; -type fでファイルだけをgrep対象にします。 grepはファイル名が1つだけだと行頭にファイル名を表示しないので/dev/nullを指定して見た目上2つのファイルにします。 また、全ファイルへのアクセス権利のあるユーザー(rootがベスト)で実行しないとパーミッションエラーになるので注意してください。
お礼
必ずひっかかる文字列にてコマンドを実行し、 コマンドの信頼性の確認が取れました。 回答ありがとうございます。
補足
回答ありがとうございます。 コマンドは実行でき、echo $?で0が帰ってきています。 が、本当にできたのか・・・というのが何かに残るようにできないでしょうか。
- ham_kamo
- ベストアンサー率55% (659/1197)
検索にヒットしないファイル名も全て表示されてしまいますが、とりあえず。 find / -print -exec grep test {} \;
補足
回答ありがとうございます。 ためしてみたところ ? と表示され、エンターキーをおしたら 「find: 文が正しくありません」 と表示されてしまいました・・ ?が表示されたときに何か入力するのでしょうか?
お礼
回答ありがとうございます。 ind / -type f -exec grep test {} /dev/null ¥; にて確認がとれました。
補足
すみません ; 抜けてました。。。 ご指摘ありがとうございます。