温馨提示×

debian readdir怎么遍历目录文件

小樊
49
2026-09-10 08:14:13
栏目: 智能运维

在 Debian(本质就是 Linux)下,遍历目录读取文件通常有两种常见方式:

  1. 使用 C 语言 opendir / readdir
  2. 使用 Shell 命令
  3. 使用高级语言(Python 等)

下面分别说明。


一、C 语言 readdir 遍历目录(最经典)

示例代码(C)

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

int main(int argc, char *argv[]) {
    DIR *dir;
    struct dirent *entry;

    if (argc < 2) {
        printf("Usage: %s <dir>\n", argv[0]);
        return 1;
    }

    dir = opendir(argv[1]);
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

编译运行

gcc readdir_test.c -o readdir_test
./readdir_test /path/to/dir

说明

  • opendir():打开目录
  • readdir():逐个读取目录项
  • d_name:文件名
  • . 和 .. 也会被读出来

二、Shell 遍历目录(最简单)

方法 1:for 循环

for f in /path/to/dir/*; do
    echo "$f"
done

方法 2:find

find /path/to/dir -maxdepth 1

方法 3:ls

ls -1 /path/to/dir

三、递归遍历(C 示例)

如果你想递归遍历子目录:

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 fullpath[1024];
        snprintf(fullpath, sizeof(fullpath), "%s/%s", path, entry->d_name);
        printf("%s\n", fullpath);
    }
    closedir(dir);
}

四、常见注意点

  • readdir 不是线程安全的(用 readdir_r 替代)
  • 文件名编码默认 UTF-8
  • 权限不足会 perror

如果你是想:

  • ✅ 写 C 程序
  • ✅ 写 Shell 脚本
  • ✅ 遍历 大目录
  • ✅ 只读取 普通文件

可以告诉我,我可以给你更针对性的示例。

0 踩