特定のサブディレクトリのコマンドを探す

特定のサブディレクトリのコマンドを探す

dir3つのサブディレクトリがあり、その中に多くのファイルと他のサブディレクトリがあるディレクトリがdir1あるdir3とします。

内部にあるファイルを検索したい(エンディングがあるとします)*.c。しかし、サブディレクトリ "dir / dir2"とすべてのサブディレクトリでのみ検索したいと思います。どうやって入れますか?

私が持っているとしましょうdir/

find . -name "*.c"

すべてのディレクトリで検索します。

どのように制限できますかdir2

答え1

代わりに-pathパラメータを使用することもできます。find-name

find . -path "dir2/*.c"

dir2これにより、直接のサブディレクトリでなくてもdir2ファイルを見つけることができます。 EG:

# find . -path "*/dir2/*.c"
./dir_a/dir2/file.c
./dir_b/dir2/file.c

答え2

Find は有効なパスをすべて許可するため、

find ./dir2 -name '*.c'

問題を解決しなければならない

dirディレクトリが次の場合、フルパスを見つけることが/home/user/dirできます。

find /home/user/dir/dir2 -name '*.c'

答え3

あなたはできますfind dir2 -name '*.c'

また、これを行うことができます(cd dir2; find . -name '*.c')

見たいけど見たくないならdir1こんな感じdir3dir2find dir1 dir3 -name '*.c'

答え4

グループを検索するときサブディレクトリ指定用途ワイルドカードするいいえ-path遅くなる可能性があるため、このフラグを使用してください。

tree findtest/
findtest/
|-- dir_1_
|-- dir_2_
|   `-- file_2_
|-- dir_3_
|   |-- dir_3_1_
|   `-- dir_3_2_
|       `-- file_3_2_
`-- file_0_

5 directories, 3 files

(現在のディレクトリには他の多くのファイルとサブディレクトリが含まれています。)

「-path」にサブディレクトリのワイルドカードを使用すると、速度が遅くなる可能性があります。

time find . -path "./findtest/dir_*_/file_*_"
./findtest/dir_2_/file_2_
./findtest/dir_3_/dir_3_2_/file_3_2_
0.084u 0.699s 0:17.84 4.3%      0+0k 0+0io 0pf+0w

より速い選択肢:

time find ./findtest/dir_*_/ -name "file_*_"
./findtest/dir_2_/file_2_
./findtest/dir_3_/dir_3_2_/file_3_2_
0.000u 0.002s 0:00.00 0.0%      0+0k 0+0io 0pf+0w

関連情報