回答:
xargs
他のコマンドが生成しない形式の入力を想定しているため、効果的に使用することは困難です。ここで間違っているのは、入力時に名前を引用する必要があるファイルがあることですxargs
(おそらくを含む'
)。
grep が再帰検索の-r
or -R
オプションをサポートしている場合は、それを使用します。
grep -r word .
それ以外の場合は、の-exec
プライマリを使用しfind
ます。これは、xargs
ファイル名に制約がないことを除いて、と同じ効果を達成する通常の方法です。比較的最近のバージョンではfind
、補助コマンドの1回の呼び出しで複数のファイルをグループ化できます。を渡す/dev/null
とgrep
、たまたま単一のファイルで呼び出された場合でも、各一致の前にファイル名が表示されます。
find . -type f -exec grep word /dev/null {} +
旧バージョンfind
(旧システムまたはOpenBSD、またはBusyBoxなどの縮小ユーティリティ)は、一度に1つのファイルでのみ補助コマンドを呼び出すことができます。
find . -type f -exec grep word /dev/null {} \;
いくつかのバージョンfind
とは、xargs
彼らが何の引用が必要とされないように、別のファイル名にヌル文字を使用して、正しく通信でき拡張子を持っています。最近では、OpenBSDのみが、この機能を備えてい-exec … {} +
ます。
find . -type f -print0 | xargs -0 grep word /dev/null
ファイルで文字列を見つけたいと思う
試してみる find . -name "*" | xargs grep -l "string"
/dev/null
。一致するファイルの数に応じて、出力形式が異なる場合は厄介です...ありがとう。