某些子目录的查找命令

某些子目录的查找命令

假设我有一个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')

如果你想看dir1dir3又不想看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

相关内容