温馨提示×

centos readdir如何过滤隐藏文件

小樊
44
2026-10-20 16:46:40
栏目: 智能运维

在 CentOS(Linux)下,使用 readdir() 读取目录时,默认会返回所有条目,包括以 . 开头的隐藏文件(如 .bashrc、. 和 ..)。

一、在 C 语言中过滤隐藏文件(readdir)

核心思路:判断文件名是否以 . 开头。

示例代码(C)

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

int main(int argc, char *argv[]) {
    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;
}

✅ 这样就不会显示:

  • .
  • ..
  • .bashrc
  • .ssh 等

二、Shell 中过滤隐藏文件(非 readdir)

如果你是在 shell 中而不是 C 程序:

ls -A

或

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

三、常见问题说明

1. readdir 一定会返回 . 和 .. 吗?

是的,一定会返回,需要手动过滤。

2. 只想排除 . 和 ..,保留其他隐藏文件?

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

3. 按文件类型过滤(可选)

if (entry->d_type == DT_REG)  // 普通文件

四、总结

需求 方法
过滤所有隐藏文件 d_name[0] == '.'
只过滤 . 和 .. strcmp 判断
Shell 中 ls -A

如果你是 C / C++ / Python / Shell 哪种场景,我可以给你更具体的示例。

0 踩