在 Debian(以及大多数 Linux 系统)中,readdir 本身是可以读取隐藏文件的,只是隐藏文件的判定规则是:以 . 开头的文件或目录(如 .bashrc、.config)。
下面从 系统调用 / C 语言 和 Shell 命令 两个层面说明。
readdir 获取隐藏文件#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 会返回所有文件,包括隐藏文件. 和 .. 也会返回. 开头)while ((entry = readdir(dir)) != NULL) {
if (entry->d_name[0] == '.') {
printf("hidden: %s\n", entry->d_name);
}
}
⚠️ 注意:. 和 .. 也会被匹配
. 和 ..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);
}
ls 显示隐藏文件ls -a
只显示隐藏文件:
ls -d .*
find 查找隐藏文件find . -name ".*" -maxdepth 1
for f in .*; do
echo "$f"
done
❌ 错误观念
readdir 默认不读隐藏文件”✅ 事实
readdir 一定会返回它们os.listdir() / os.scandir() 都会返回隐藏文件<filesystem> 同样包含隐藏文件os.ReadDir 也会返回如果你是想 过滤隐藏文件 / 递归遍历 / 按类型处理 / 性能优化(readdir vs getdents),可以告诉我具体场景。