温馨提示×

debian readdir如何统计数量

小樊
44
2026-09-07 10:37:37
栏目: 智能运维

在 Debian(或任何 Linux 系统)中,readdir 通常是 C 语言中用于读取目录的函数(opendir / readdir)。如果你说的是 用 readdir 统计目录中的文件数量,下面分几种常见情况说明。


一、C 语言使用 readdir 统计数量(最贴合“readdir”)

1️⃣ 统计目录中的条目数量(包括 . 和 ..)

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

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

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

    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;
}

✅ 编译:

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

2️⃣ 排除 . 和 ..

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

3️⃣ 只统计普通文件(不包括目录)

#include <sys/stat.h>

struct stat st;
char path[1024];

while ((entry = readdir(dir)) != NULL) {
    snprintf(path, sizeof(path), "%s/%s", argv[1], entry->d_name);
    if (stat(path, &st) == 0 && S_ISREG(st.st_mode)) {
        count++;
    }
}

二、Shell 中“等效 readdir”统计数量(最常用)

如果你不是写 C 程序,只是想在 Debian 上统计目录数量:

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

ls -1 | wc -l

2️⃣ 只统计文件(不含目录)

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

3️⃣ 递归统计所有文件

find . -type f | wc -l

三、常见误区说明

  • readdir 不会区分文件类型,需要配合 stat
  • readdir 返回的是目录项(dirent),不是完整路径
  • . 和 .. 也会被统计

如果你是指:

  • Python 的 os.readdir
  • 某种特定语言
  • 统计 inode / 子目录 / 隐藏文件

可以告诉我,我可以给你更精确的示例。

0 踩