web-dev-qa-db-ja.com

Linuxシステムで「名前」に一致するすべてのファイルを検索し、それらで「テキスト」を検索します

Linuxシステムで「filename.ext」のすべてのインスタンスを検索し、どのインスタンスに「lookingfor」というテキストが含まれているかを確認する必要があります。

動作するLinuxコマンドライン操作のセットはありますか?

25
siliconpi
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
29
dogbane

それぞれのディレクトリに移動し、次のコマンドを入力します。

見つける。 -name "* .ext" | xargs grep 'lookingfor'

6
Amareswar

より単純なものは、

find / -type f -name filename.ext -print0 | xargs -0 grep  'lookingfor'

-print0を検索してxargsに0を指定すると、単一のディレクトリ内の多数のファイルの問題が軽減されます。

3
digen

試してください:

find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;

findは、/という名前のファイルをルートfilename.extから再帰的に検索し、見つかったすべてのオカレンスに対してlookingforを検索するファイル名でgrepを実行し、見つかった場合は行番号(-n)およびファイル名(-H)。

1
codaddict

私は次のコマンドを最も簡単な方法で見つけます:

grep -R --include="filename.ext" lookingfor

または-iを追加して、大文字と小文字を区別しないで検索します。

grep -i -R --include="filename.ext" lookingfor
0
R. Oosterholt