回答:
xargs他のコマンドが生成しない形式の入力を想定しているため、効果的に使用することは困難です。ここで間違っているのは、入力時に名前を引用する必要があるファイルがあることですxargs(おそらくを含む')。
grep が再帰検索の-ror -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。一致するファイルの数に応じて、出力形式が異なる場合は厄介です...ありがとう。