web-dev-qa-db-ja.com

-rスイッチを使用せずにgrepを使用して親フォルダーのサブフォルダー内のファイル内のテキスト文字列を検索する方法

私はSolaris 10を使用していて、2つのgrepバージョンがあり、1つは/usr/binに、もう1つは/usr/xpg4/binにあります。 grepを使用して、親ディレクトリのサブフォルダ内のファイル内のテキストを検索する方法についての回答を探しています。すべての回答は、私のバージョンのgrepでは利用できない-rまたは-Rスイッチについて語っています。

6
DemiSheep

標準(POSIX)構文は次のとおりです。

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

/dev/nullは、grepが常にファイル名を出力するようにするためのものです)。これは、Solarisを含むすべてのPOSIXシステムで機能します。動作しないことがわかっている90年代以降の唯一の既知のシステムは古い(現在は非常に古い)GNUシステムです。

GNUは最初に-print0述語とxargsの代わりに-0オプションを導入しました。

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

これをサポートする実装は他にもいくつかありますが、Solarisはサポートしていません。

上記では、理論的には、ファイルがない場合にgrepを実行しないように-rオプションを追加する必要がありますが、これはportableではなく、この特定のケースでは機能的に違いはない

15
cuonglm