温馨提示×

debian readdir如何统计文件数

小樊
40
2026-10-16 01:59:22
栏目: 智能运维

在 Debian(或者说 Linux 下),readdir 本身是 C 语言里读取目录项的函数(readdir() / readdir_r()),它本身不会自动统计文件数,需要你在代码里自己计数。

下面分几种常见情况说明。


一、用 C 语言 readdir 统计文件数(最贴近你的问题)

1️⃣ 统计目录下所有“条目”(包括 . 和 ..)

#include <stdio.h>
#include <dirent.h>

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

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

    while ((entry = readdir(dir)) != NULL) {
        count++;
    }

    closedir(dir);
    printf("Total entries: %d\n", count);
    return 0;
}

2️⃣ 只统计“普通文件”(排除目录、. 、..)

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

int main(int argc, char *argv[]) {
    DIR *dir;
    struct dirent *entry;
    struct stat st;
    char path[1024];
    int count = 0;

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

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

        snprintf(path, sizeof(path), "%s/%s", argv[1], entry->d_name);
        stat(path, &st);

        if (S_ISREG(st.st_mode))  // 普通文件
            count++;
    }

    closedir(dir);
    printf("Regular files: %d\n", count);
    return 0;
}

3️⃣ 递归统计子目录中的文件(类似 find)

思路:

  • readdir 发现目录
  • 递归调用自己

如果你需要,我可以给你一份完整递归版本。


二、不用写代码,Debian 命令行统计(很常用)

如果你只是想“统计文件数”,通常更快:

统计当前目录文件数(不含子目录)

ls -1 | wc -l

只统计普通文件

find . -maxdepth 1 -type f | wc -l

递归统计所有文件

find . -type f | wc -l

三、总结

  • ✅ readdir 只是“读目录”
  • ✅ 文件数必须 自己计数
  • ✅ 是否包含目录 / 隐藏文件 / 子目录,逻辑由你定
  • ✅ 命令行 find 通常比写 C 更方便

如果你能告诉我:

  • 是 C 程序 还是 Shell
  • 是否要 递归
  • 是否要 排除隐藏文件

我可以直接给你最合适的完整代码。

0 踩