假设我有一个dir
包含三个子目录的目录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