温馨提示×

debian readdir怎么过滤文件

小樊
45
2026-09-07 10:20:36
栏目: 智能运维

在 Debian(或者说 Linux)下,readdir 通常指 C 语言中的 readdir() 函数(来自 <dirent.h>)。
“过滤文件”一般有两种理解,下面分别说明。


一、在 C 程序里用 readdir() 过滤文件

1️⃣ 基本用法

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

int main() {
    DIR *dir = opendir(".");
    struct dirent *entry;

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

    closedir(dir);
    return 0;
}

2️⃣ 手动过滤(最常见方式)

在 readdir() 返回后,自己判断文件名或类型。

示例:只显示普通文件

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

while ((entry = readdir(dir)) != NULL) {
    if (entry->d_type == DT_REG) {
        printf("文件: %s\n", entry->d_name);
    }
}

示例:过滤特定后缀(如 .txt)

if (strstr(entry->d_name, ".txt")) {
    printf("%s\n", entry->d_name);
}

示例:排除 . 和 ..

if (strcmp(entry->d_name, ".") == 0 ||
    strcmp(entry->d_name, "..") == 0)
    continue;

3️⃣ 按文件类型过滤(d_type)

d_type 含义
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接
DT_UNKNOWN 未知(需 stat)

⚠️ 注意:某些文件系统(如 NFS)d_type 可能是 DT_UNKNOWN,要用 stat()。


4️⃣ 用 stat() 精确过滤

struct stat st;
stat(entry->d_name, &st);

if (S_ISREG(st.st_mode)) {
    // 普通文件
}

二、如果你说的是“命令行 readdir 工具”

Debian 没有叫 readdir 的命令,但你可能是指:

✅ ls + 过滤

ls *.txt
ls -l | grep log

✅ find(最强大)

find . -type f -name "*.txt"
find . -type d

✅ readdir 风格工具

  • tree
  • fd(现代 find 替代)
fd "\.txt$"

三、常见需求对照表

需求 方法
只看文件 entry->d_type == DT_REG
只看目录 entry->d_type == DT_DIR
按后缀 strstr()
排除隐藏文件 name[0] != '.'
按权限/大小 stat()

如果你能告诉我:

  • ✅ 是 C 程序 还是 Shell 命令
  • ✅ 想过滤什么(类型 / 后缀 / 权限 / 大小)

我可以直接给你完整可运行代码。

0 踩