dir
3つのサブディレクトリがあり、その中に多くのファイルと他のサブディレクトリがあるディレクトリが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
こんな感じdir3
dir2
find 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