私の状況:
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はそれを無視します...)