温馨提示×

linux readdir怎样读隐藏文件

小樊
41
2026-09-29 19:53:59
栏目: 智能运维

在 Linux 下使用 readdir() 读取目录时,隐藏文件(以 . 开头的文件)本来就会被读出来,只是通常你在代码或输出里“忽略”了它们。

下面分几种情况说明。


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

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

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

示例:

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

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

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

    closedir(dir);
    return 0;
}

运行后会看到:

.
..
.bashrc
hidden.txt
normal.txt

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

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

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

⚠️ 注意:这样会包含 . 和 ..


三、排除 . 和 ..

while ((entry = readdir(dir)) != NULL) {
    if (entry->d_name[0] == '.' &&
        strcmp(entry->d_name, ".") != 0 &&
        strcmp(entry->d_name, "..") != 0) {
        printf("hidden file: %s\n", entry->d_name);
    }
}

四、常见误区

❌ 误以为 readdir 读不到隐藏文件

  • 实际上 能读到
  • ls 默认不显示,是因为 ls 自己过滤了

❌ 用 opendir 的路径影响隐藏文件

  • opendir("/some/dir") 照样能读 .hidden

五、补充:stat 判断是否是隐藏文件(不推荐)

隐藏不是文件属性,而是命名规则,所以一般用文件名判断即可。


如果你是在 C / C++ / Python / Shell 里用 readdir,或者想递归读取隐藏文件,可以告诉我具体语言,我可以给你更完整的例子。

0 踩