在 Linux 中,glob
和 copendir
是两种不同的文件名模式匹配和目录遍历方法。glob
用于匹配符合特定模式的文件名,而 copendir
则用于打开一个目录并逐个读取其中的条目。你可以将它们结合起来使用,以便在目录中查找符合特定模式的文件。
以下是一个示例,展示了如何在 C 语言中使用 glob
和 copendir
结合来查找目录中符合特定模式的文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glob.h>
#include <dirent.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
return 1;
}
const char *dir = argv[1];
struct glob_t glob_result;
int ret = glob(dir, GLOB_TILDE, NULL, &glob_result);
if (ret != 0) {
fprintf(stderr, "glob() error: %d\n", ret);
return 1;
}
DIR *dp = opendir(dir);
if (dp == NULL) {
perror("opendir");
globfree(&glob_result);
return 1;
}
struct dirent *entry;
while ((entry = readdir(dp)) != NULL) {
for (size_t i = 0; i < glob_result.gl_pathc; ++i) {
if (strncmp(entry->d_name, glob_result.gl_pathv[i], strlen(entry->d_name)) == 0) {
printf("%s\n", entry->d_name);
break;
}
}
}
closedir(dp);
globfree(&glob_result);
return 0;
}
这个程序接受一个目录作为命令行参数,然后使用 glob
函数查找该目录中符合模式的文件。接下来,它使用 copendir
打开目录,并使用 readdir
逐个读取目录中的条目。对于每个条目,程序检查它是否与 glob
返回的任何路径匹配。如果找到匹配项,则打印文件名。
要编译此程序,请将其保存为 find_files.c
,然后运行以下命令:
gcc -o find_files find_files.c
现在,你可以使用以下命令运行程序,查找符合特定模式的文件:
./find_files /path/to/directory/*.txt
这将打印出 /path/to/directory
目录中所有 .txt
文件的列表。