温馨提示×

centos readdir怎样过滤隐藏文件

小樊
50
2026-09-06 07:18:39
栏目: 智能运维

在 CentOS(本质是 Linux 下 C/C++ 编程)里使用 readdir() 读取目录时,隐藏文件通常是指以 . 开头的文件(如 .bashrc、.ssh)。

readdir() 本身不会自动过滤隐藏文件,需要你在代码里手动判断。


一、使用 readdir 过滤隐藏文件(C 示例)

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

int main() {
    DIR *dir;
    struct dirent *entry;

    dir = opendir(".");
    if (!dir) {
        perror("opendir");
        return 1;
    }

    while ((entry = readdir(dir)) != NULL) {
        // 过滤隐藏文件(以 '.' 开头)
        if (entry->d_name[0] == '.')
            continue;

        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

✅ 这样就不会显示 . 和 .. 以及所有 .xxx 隐藏文件。


二、常见问题说明

1. . 和 .. 是什么?

  • . 表示当前目录
  • .. 表示上级目录
    它们也是以 . 开头的,所以上面的判断会一起过滤掉。

2. 只想过滤“隐藏文件”,但保留 . 和 ..?

一般不需要,但如果真要:

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

3. 是否区分文件类型?

readdir() 只能拿到名字,不能保证是文件还是目录。
如需判断类型,可用:

  • stat()
  • entry->d_type(部分文件系统支持)

示例(仅显示普通文件):

if (entry->d_type == DT_REG) {
    printf("%s\n", entry->d_name);
}

三、Shell 层面的“等价过滤”

如果你只是想在命令行过滤:

ls -A

或

find . -maxdepth 1 -name '[^.]*'

如果你说的是:

  • C++
  • 多线程
  • 递归目录
  • 按权限/类型过滤

可以告诉我具体场景,我可以给你更合适的代码。

0 踩