在 Debian(以及其它 Linux 发行版)里,readdir 本身是 C 语言里的系统调用/库函数,不是 shell 命令;而 find 是 命令行工具。
所以“readdir 结合 find 用”通常有两种理解,我分开说明:
readdir,同时调用 find如果你是在写 C 程序,想:
readdir 遍历目录find 做进一步处理#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) { // 普通文件
char cmd[256];
snprintf(cmd, sizeof(cmd),
"find . -name '%s' -mtime -1", entry->d_name);
system(cmd);
}
}
closedir(dir);
return 0;
}
✅ 适合:
readdir 做初步筛选findfind 代替 readdir在 shell 里,95% 的情况不需要 readdir,直接用 find 更强:
find /path -type f -name "*.log" -mtime +7 -exec rm {} \;
find /path -type f | wc -l
while read(类似 readdir 的感觉)find /path -type f | while read file; do
echo "处理: $file"
done
只列当前目录(不递归):
find . -maxdepth 1 -type f
等价于:
readdir()
| 场景 | 推荐方式 |
|---|---|
| Shell 脚本 | ✅ 直接用 find |
| C 程序遍历目录 | ✅ readdir |
| C 程序 + 复杂查找 | ✅ readdir + system("find ...") |
| 高性能需求 | ❌ 避免频繁 system(find) |
如果你能说清楚:
我可以直接给你一段可运行的代码或命令。