温馨提示×

linux readdir过滤文件吗

小樊
43
2026-10-11 12:39:01
栏目: 智能运维

在 Linux 中,readdir 本身不会过滤文件,它是用来**读取目录中的所有条目(包括文件、子目录、符号链接等)**的系统调用/库函数。

下面分几个层面说明:


1. readdir 本身的行为

readdir 的作用:

  • 打开目录后,依次读取目录项
  • 返回目录中的每一个条目
  • 包括:
    • 普通文件
    • 目录(. 和 .. 也会返回)
    • 符号链接
    • 设备文件
    • 套接字等

示例(C 语言):

struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}

这里不会自动跳过任何文件类型,也不会过滤隐藏文件(以 . 开头的)。


2. 常见“过滤”其实是程序员自己做的

过滤隐藏文件

if (entry->d_name[0] == '.')
    continue;

过滤某种文件类型

if (entry->d_type == DT_REG)  // 普通文件
    printf("%s\n", entry->d_name);

⚠️ 注意:d_type 在某些文件系统上可能不可靠(如某些网络文件系统)


3. Shell 中的“过滤”是另一回事

比如:

ls
ls -a
ls *.txt
  • ls 内部调用 readdir
  • 是否显示隐藏文件、是否过滤后缀,是 ls 自己做的
  • * 是 shell 展开,不是 readdir

4. 其他相关函数(可配合过滤)

  • stat() / lstat():获取文件详细信息
  • scandir():支持传入过滤函数
int filter(const struct dirent *e) {
    return e->d_name[0] != '.';
}

总结

✅ readdir 不过滤文件
✅ 它返回目录中的所有条目
✅ 过滤逻辑需要你自己写代码或使用更高层函数(如 scandir)

如果你有具体使用场景(C / shell / Python / 想按类型或后缀过滤),可以告诉我,我可以给你更具体的示例。

0 踩