温馨提示×

linux readdir怎样读隐藏

小樊
33
2026-10-23 05:15:06
栏目: 智能运维

在 Linux 下使用 readdir() 读取目录时,隐藏文件(以 . 开头的文件)其实也会被读出来,只是它们通常需要你自己在程序里判断/显示。

下面分几种情况说明。


一、readdir 本身能读到隐藏文件吗?

✅ 能。

readdir() 会返回目录下的所有条目,包括:

  • 普通文件
  • 目录
  • 隐藏文件(如 .bashrc、.git)
  • . 和 ..

示例代码:

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

运行后会看到 . 开头的文件。


二、如何“只读取隐藏文件”?

隐藏文件的定义:文件名以 . 开头

if (entry->d_name[0] == '.') {
    printf("隐藏文件: %s\n", entry->d_name);
}

三、如何“排除隐藏文件”?

if (entry->d_name[0] != '.') {
    printf("%s\n", entry->d_name);
}

四、常见疑问

1. ls 为什么默认看不到隐藏文件?

因为 ls 默认过滤掉以 . 开头的文件,不是系统层面隐藏。

用 ls -a 就能看到,和 readdir() 的行为一致。


2. . 和 .. 也是隐藏文件吗?

  • 它们以 . 开头
  • 但通常特殊处理:
if (strcmp(entry->d_name, ".") == 0 ||
    strcmp(entry->d_name, "..") == 0)
    continue;

五、递归读取(包含子目录)

如果你需要递归读取所有文件(包括隐藏的),可以结合 stat() + 判断 DT_DIR。


总结

需求 做法
读隐藏文件 readdir() 直接读
判断隐藏 d_name[0] == '.'
排除隐藏 d_name[0] != '.'
排除 . .. strcmp 判断

如果你用的是 C++ / Python / shell,或者想 按权限过滤隐藏文件,可以继续问。

0 踩