多くのディレクトリでgrepを使用しますが、すべてのサブディレクトリではなく、各ディレクトリの特定のサブディレクトリのみを検索します。

多くのディレクトリでgrepを使用しますが、すべてのサブディレクトリではなく、各ディレクトリの特定のサブディレクトリのみを検索します。

私の状況:

dir1 
  subdir1
      FooFile
  subdir2

dir2 
  subdir1
      FooFile
  subdir2

したがってcd dir1、私は簡単に次のことを行いfind . | xargs grep "Foo"ますFoo

問題は、サブディレクトリとファイルが多すぎるため、検索に時間がかかることです。各ホームディレクトリに再帰的に移動し、具体的にはサブディレクトリ(subdir1)に移動し、次にgrepに移動したいと思います。

Fooすべてのディレクトリに含まれるすべてのファイルの名前を一覧表示する最良の方法は何ですか?名前が異なる各ディレクトリの場合、subdir1常に1つのレベルより下にあり、dir1常にsubdir1正確に名前が付けられます。

ベストアンサー1

何について

grep "foo" */subdir1/*  */subdir1/.*

? (現在の問題によると、これは声明に合うようです。シェルが完全なリストをgrepに供給できないほど「subdir1」サブディレクトリが多すぎない限り。

ファイルに「foo」が表示されることを確認するには、-qを追加して0で終了するかどうかをテストします。

また、再帰 grep を実行し、不要なものを削除することもできます (多くの I/O ですが簡単です)。

grep -r "foo" . | grep "^\./[^/][^/]*/subdir1/[^/][^/]*:"

(以下の注を参照してください:ここでは、名前に「:」が含まれていて、ファイルにfooが含まれていても、subdir1でファイル名を見つけたように動作します。最初のgrepでは最初の「./firstleveldir/」という名前が表示されないため、2番目のgrepはそれを無視します...)

おすすめ記事