温馨提示×

linux readdir怎么跳过隐藏

小樊
42
2026-09-17 20:01:03
栏目: 智能运维

在 Linux 下使用 readdir() 读取目录时,**“隐藏文件”**指的是以 . 开头的文件(如 .bashrc.git)。
readdir() 不会自动跳过隐藏文件,需要你在代码里手动判断。


基本做法:判断文件名是否以 . 开头

readdir() 返回的 struct dirent 中,用 d_name 判断即可。

示例(C 语言)

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

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

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

可选:同时跳过 ...

通常 ... 也要忽略:

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

常见误区

  • readdir() 不会自动隐藏 . 文件
  • ls 默认不显示隐藏文件,但 readdir()
  • ✅ 是否“跳过”完全由你自己控制

如果你用的是其他语言

C++

if (entry.path().filename().string()[0] == '.') continue;

Python

import os
for name in os.listdir('.'):
    if name.startswith('.'):
        continue

如果你是在 特定场景(比如递归遍历、特定文件系统、性能要求)下使用,可以告诉我,我可以给你更合适的写法。

0