OSXを使用しています。
.php
拡張子と文字列41
がファイルの内容のどこかにあるディレクトリでファイルを見つける必要があります。
grep
を使ってみました。
grep -R 41 *.php
ただし、これはCWDでのみファイルを検索し、サブディレクトリでは検索しないようでした。
また、find
をいじってみました。
私はこれを理解することができませんでした。
私は何が間違っているのですか?
両方が必要です。
find . -name '*.php' -type f -exec grep -q 41 {} \; -print
grepが再帰的に機能するためには、grepの引数に、再帰が予想されるディレクトリを含める必要があります。
次のファイルを見てください
shiny:t fl$ find .
.
./evenmore
./evenmore/foo.php
./evenmore/inhere.php
./evenmore/no41in.php
./foo.php
./inhere.php
./morestuff
./morestuff/foo.php
./morestuff/inhere.php
./morestuff/no41in.php
./no41in.php
./stuff
./stuff/no41in.php
これは動作しません:
shiny:t fl$ grep -r 41 *.php
foo.php:41
inhere.php:41
パス名の展開が行われた後、シェルはアスタリスクを処理し、コマンドラインは現在
shiny:t fl$ set -x
shiny:t fl$ grep -r 41 *.php
+ grep -r 41 foo.php inhere.php no41in.php
foo.php:41
inhere.php:41
grepに渡された引数に子孫となるディレクトリはありません。ただし、これは存在するすべてのディレクトリで下降します。
shiny:t fl$ grep -r 41 .
./evenmore/foo.php:41
./evenmore/inhere.php:41
./foo.php:41
./inhere.php:41
./morestuff/foo.php:41
./morestuff/inhere.php:41
それがドットディレクトリも処理するかどうかは、読者の練習問題として残されています:-)
ack を使用すると、ack 41 --php
を実行できます。
ack
はgrep
に似ており、強調表示と行番号が組み込まれており、ソースコードを検索するために設計されています。
なんとか使った
grep 41 **/*.php
そしてそれはうまくいった。