温馨提示×

ubuntu readdir支持递归吗

小樊
44
2026-10-03 16:13:50
栏目: 智能运维

简短回答:readdir 本身不支持递归。

详细说明如下:

1. readdir 是什么

在 Ubuntu / Linux 中,readdir(以及 readdir64、readdir_r)是 POSIX / glibc 提供的目录读取函数,用于:

  • 打开目录(opendir)
  • 逐个读取目录项(readdir)
  • 关闭目录(closedir)

它只读取当前目录下的条目,不会自动进入子目录。

2. 为什么不支持递归

readdir 的设计原则是:

一次只读取一个目录项(dirent)

如果某个目录项是子目录(d_type == DT_DIR),你需要自己:

  • 拼接路径
  • 再次 opendir
  • 再次 readdir

也就是说:递归是你自己写的逻辑,不是 readdir 提供的

3. 示例(C 语言递归读取目录)

#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>

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

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

        char full[1024];
        snprintf(full, sizeof(full), "%s/%s", path, entry->d_name);
        printf("%s\n", full);

        if (entry->d_type == DT_DIR)
            list_dir(full);
    }
    closedir(dir);
}

4. 如果你不想自己递归

可以选择:

  • nftw()(标准库,支持递归遍历)
  • fts_open() / fts_read()(更强大)
  • Shell:find
  • Python:os.walk

总结

  • ✅ readdir:单层目录读取
  • ❌ 不自动递归
  • ✅ 递归需自行实现或用更高层 API

如果你是在 Shell / Python / C++ 场景下问,也可以告诉我,我可以给对应示例。

0 踩