現在のディレクトリで「chrome」というテキストを含むファイルを見つけたいのですが。
$ find . -exec grep chrome
find: missing argument to `-exec'
何が悪いのですか?
;
(シェルが解釈しないように\;
としてエスケープされています)または+
と{}
を逃しました:
find . -exec grep chrome {} \;
または
find . -exec grep chrome {} +
find
はgrep
を実行し、見つかったファイル名で{}
を置き換えます。 ;
と+
の違いは、;
ではファイルごとに1つのgrep
コマンドが実行されるのに対し、+
ではできるだけ多くのファイルが与えられるgrep
へのパラメータとして一度に。
これにはfind
を使用する必要はありません。 grepは、現在のディレクトリにあるすべてのグロブリストからファイルを開く処理を行うことができます。
grep chrome *
...またはフォルダとその下のすべてについて再帰的に:
grep chrome . -R
find . | xargs grep 'chrome'
あなたも行うことができます:
find . | xargs grep 'chrome' -ls
1つ目はファイルの行を示し、2つ目はファイルをリストするだけです。
カレブのオプションは、きちんとした、少ないキーストロークです。
検索は1つの方法であり、the_silver_searcher
その後、必要なのは
ag chrome
すべてのファイル(サブディレクトリを含む)でchrome)を検索し、見つけるよりも高速です
これが私が通常find/execを使用する方法の例です...
find . -name "*.py" -print -exec fgrep hello {} \;
これにより、すべての.pyファイルが再帰的に検索され、各ファイルがファイル名を出力し、fgrepがその(各)ファイルの「hello」を検索します。出力は次のようになります(今日実行しただけです)。
./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
行の代わりにファイルのリストを表示するには:
grep -l "chrome" *
または:
grep -r -l "chrome" .