Windowsでは、すべてのサブディレクトリのすべてのファイルから文字列を検索したい場合は、次のようにします。
findstr /C:"the string" /S *.h
ただし、Linux(Ubuntuなど)では、find
、xargs
、およびgrep
を含むパイプされたコマンド以外に方法はありません(例はこのページにあります:- サブディレクトリを再帰的にgrepするにはどうすればよいですか? )。しかし、私の質問は異なります:シェルスクリプトを記述しなくても、この魔法を通じて機能する単一の組み込みコマンドはありますか?
GNU grepでは、サブディレクトリ全体を再帰的に検索できます。
grep -r --include='*.h' 'the string' .
grep -r searchpattern /path/to/start/in
どこ /path/to/start/in/
は単に ".
"現在のディレクトリ。
番号。 find -name \*.h -print0 | xargs -0 grep -l 'the regex'
は、魔法のようなものです。
この魔法を介して動作する単一の組み込みコマンドはありますか?
いいえ、そのようなコマンドが存在すると仮定することはできません。
Unixには多くの異なる実装があり、それぞれに異なる癖があります。 POSIX、共通の分母(およびUnices全体の標準に最も近いもの) grep
にそのようなオプションを指定しません 。
他の回答で述べたように、GNUのgrep
の実装には、必要なことを行う非標準のオプションがあります。この特定の実装はLinuxシステムでは一般的である可能性がありますが、一部のLinuxシステムでさえ、Unixでの使用を想定することはできません。
最後に、一度にすべてを実行しようとする1つの大きなモノリシック実行可能ファイルの使用よりも、いくつかのプリミティブプログラムの組み合わせを優先するのは nix哲学 であることを述べておきます。
あなたの場合、ファイルシステムのクロールとストリーム内の一致する正規表現は、2つの別々のタスクです。それぞれを別々のプログラムで扱うのは正常なことです。
指定されたディレクトリから文字列を検索するには、以下のコマンドを使用します
find <fullDirectoryPath> -name '*' -exec grep -l '<StringToFind>' {} \;
例えば:
find /apps_bev/apps/xfer/export/02210 -name '*' -exec grep -l '38221000001032' {} \;