温馨提示×

debian readdir能否递归搜索

小樊
47
2026-09-01 10:15:20
栏目: 智能运维

简短结论:readdir 本身不能递归搜索,它只负责“读一个目录里的条目”。

1. readdir 是什么

在 Debian / Linux 下,readdir(以及 readdir_r)是 POSIX / glibc 提供的 目录读取函数

struct dirent *readdir(DIR *dirp);

作用:

  • 打开目录(opendir
  • 一次读一个目录项(文件 / 子目录)
  • 不会自动进入子目录

2. 为什么不能递归

readdir 只做到这一层:

目录 A
 ├─ file1
 ├─ dirB

readdir 会返回:

  • file1
  • dirB

它不会去 dirB 里读内容

3. 如何“递归搜索”

需要你自己写递归逻辑:

void list_dir(const char *path) {
    DIR *dir = opendir(path);
    struct dirent *entry;

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_DIR) {
            if (strcmp(entry->d_name, ".") == 0 ||
                strcmp(entry->d_name, "..") == 0)
                continue;

            char child[PATH_MAX];
            snprintf(child, sizeof(child), "%s/%s", path, entry->d_name);
            list_dir(child); // 递归
        } else {
            printf("%s/%s\n", path, entry->d_name);
        }
    }
    closedir(dir);
}

4. Debian 下更简单的方式

如果你不是写 C 程序,而是“在 Debian 上搜索文件”:

  • shell:
    find /path -type f
    
  • C 高层库(如 GLib、Boost):已封装递归

总结

  • readdir:只读单层目录
  • ❌ 不支持递归
  • ✅ 递归必须由你用 readdir + 递归调用 实现

如果你是想 用 C / C++ / Python / shell 实现递归搜索,可以告诉我语言,我可以直接给你完整示例。

0