温馨提示×

debian readdir如何获取隐藏文件

小樊
41
2026-10-04 09:37:05
栏目: 智能运维

在 Debian(以及大多数 Linux 系统)中,readdir 本身是可以读取隐藏文件的,只是隐藏文件的判定规则是:以 . 开头的文件或目录(如 .bashrc、.config)。

下面从 系统调用 / C 语言 和 Shell 命令 两个层面说明。


一、C 语言中使用 readdir 获取隐藏文件

1. 基本示例

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

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

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

    while ((entry = readdir(dir)) != NULL) {
        // entry->d_name 就是文件名
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

✅ 说明:

  • readdir 会返回所有文件,包括隐藏文件
  • . 和 .. 也会返回
  • 是否“隐藏”只是命名约定,不是文件系统属性

2. 只获取隐藏文件(以 . 开头)

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

⚠️ 注意:. 和 .. 也会被匹配

3. 排除 . 和 ..

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

二、Shell 中如何读取隐藏文件(对比)

1. ls 显示隐藏文件

ls -a

只显示隐藏文件:

ls -d .*

2. find 查找隐藏文件

find . -name ".*" -maxdepth 1

3. Bash 遍历隐藏文件

for f in .*; do
    echo "$f"
done

三、常见误解澄清

❌ 错误观念

  • “readdir 默认不读隐藏文件”
  • “隐藏文件是特殊属性”

✅ 事实

  • 隐藏文件 ≠ 特殊权限
  • readdir 一定会返回它们
  • 是否隐藏只是用户和工具的约定

四、如果你用的是其他语言

  • Python:os.listdir() / os.scandir() 都会返回隐藏文件
  • C++:<filesystem> 同样包含隐藏文件
  • Go:os.ReadDir 也会返回

如果你是想 过滤隐藏文件 / 递归遍历 / 按类型处理 / 性能优化(readdir vs getdents),可以告诉我具体场景。

0 踩