在 Linux 中,readdir 本身不会过滤文件,它是用来**读取目录中的所有条目(包括文件、子目录、符号链接等)**的系统调用/库函数。
下面分几个层面说明:
readdir 本身的行为readdir 的作用:
. 和 .. 也会返回)示例(C 语言):
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
这里不会自动跳过任何文件类型,也不会过滤隐藏文件(以 . 开头的)。
if (entry->d_name[0] == '.')
continue;
if (entry->d_type == DT_REG) // 普通文件
printf("%s\n", entry->d_name);
⚠️ 注意:
d_type在某些文件系统上可能不可靠(如某些网络文件系统)
比如:
ls
ls -a
ls *.txt
ls 内部调用 readdirls 自己做的* 是 shell 展开,不是 readdirstat() / lstat():获取文件详细信息scandir():支持传入过滤函数int filter(const struct dirent *e) {
return e->d_name[0] != '.';
}
✅ readdir 不过滤文件
✅ 它返回目录中的所有条目
✅ 过滤逻辑需要你自己写代码或使用更高层函数(如 scandir)
如果你有具体使用场景(C / shell / Python / 想按类型或后缀过滤),可以告诉我,我可以给你更具体的示例。