Linuxシステムで「filename.ext」のすべてのインスタンスを検索し、どのインスタンスに「lookingfor」というテキストが含まれているかを確認する必要があります。
動作するLinuxコマンドライン操作のセットはありますか?
find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +
find
はファイルのバッチ全体を1つずつ送信する代わりにgrep
に送信するため、+
を使用してコマンドを終了する方が\;
よりも効率的です。これにより、検出された個々のファイルごとにfork/execが回避されます。
しばらく前に、xargs
対{} +
対{} \;
のパフォーマンスを比較するテストを行いましたが、{} +
の方が高速であることがわかりました。ここに私の結果のいくつかがあります:
time find . -name "*20090430*" -exec touch {} +
real 0m31.98s
user 0m0.06s
sys 0m0.49s
time find . -name "*20090430*" | xargs touch
real 1m8.81s
user 0m0.13s
sys 0m1.07s
time find . -name "*20090430*" -exec touch {} \;
real 1m42.53s
user 0m0.17s
sys 0m2.42s
それぞれのディレクトリに移動し、次のコマンドを入力します。
見つける。 -name "* .ext" | xargs grep 'lookingfor'
より単純なものは、
find / -type f -name filename.ext -print0 | xargs -0 grep 'lookingfor'
-print0を検索してxargsに0を指定すると、単一のディレクトリ内の多数のファイルの問題が軽減されます。
試してください:
find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;
find
は、/
という名前のファイルをルートfilename.ext
から再帰的に検索し、見つかったすべてのオカレンスに対してlookingfor
を検索するファイル名でgrepを実行し、見つかった場合は行番号(-n
)およびファイル名(-H
)。
私は次のコマンドを最も簡単な方法で見つけます:
grep -R --include="filename.ext" lookingfor
または-i
を追加して、大文字と小文字を区別しないで検索します。
grep -i -R --include="filename.ext" lookingfor