すべてのサブディレクトリでファイルを再帰的に検索する2つの方法のうち、どちらがより速くより良いですか?
find . -regex ".*/.*abc.*"
または
find . | grep ".*abc.*"
ベストアンサー1
UNIXファイル名は通常、0x00(NULL)および0x2F(/)を除いてオクテット(8ビットバイト)で構成できます。他のすべてのオクテットは有効です。これには、0x0A(改行文字)などの良い内容が含まれます。
あなたのfind
例は、奇妙な文字(改行文字など)を含むファイル名を正しく処理します。
find | grep
このような状況に直面すると、あなたの例は奇妙で間違った結果を提供します。一つ「Line 1\nLine 2」というファイルは次のとおりです。二つ文書)。
使用できますfind -print0 | grep -z
(たとえば、LinuxでGNUバージョンを使用している場合)。これにより精度が維持されます。より多くのメモリを使用します。オプションを使用して、findに拡張正規表現(例:)を使用するように指示できます-regextype
。
非常に複雑なマッチングを実行したい場合は、コマンドラインを短いPerlプログラムに変換して編集して複雑さを追加できるスクリプトが好きfind2perl
です。find