web-dev-qa-db-ja.com

find -execを実行するには?

現在のディレクトリで「chrome」というテキストを含むファイルを見つけたいのですが。

$ find . -exec grep chrome
find: missing argument to `-exec'

何が悪いのですか?

538
ripper234

;(シェルが解釈しないように\;としてエスケープされています)または+{}を逃しました:

find . -exec grep chrome {} \;

または

find . -exec grep chrome {} +

findgrepを実行し、見つかったファイル名で{}を置き換えます。 ;+の違いは、;ではファイルごとに1つのgrepコマンドが実行されるのに対し、+ではできるだけ多くのファイルが与えられるgrepへのパラメータとして一度に。

801
bmk

これにはfindを使用する必要はありません。 grepは、現在のディレクトリにあるすべてのグロブリストからファイルを開く処理を行うことができます。

grep chrome *

...またはフォルダとその下のすべてについて再帰的に:

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

あなたも行うことができます:

find . | xargs grep 'chrome' -ls

1つ目はファイルの行を示し、2つ目はファイルをリストするだけです。

カレブのオプションは、きちんとした、少ないキーストロークです。

20
Mathew

検索は1つの方法であり、the_silver_searcherその後、必要なのは

ag chrome

すべてのファイル(サブディレクトリを含む)でchrome)を検索し、見つけるよりも高速です

7
Ask and Learn

これが私が通常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"
5
jon

行の代わりにファイルのリストを表示するには:

grep -l "chrome" *

または:

grep -r -l "chrome" .
3