温馨提示×

debian readdir如何排序文件列表

小樊
37
2026-09-10 08:18:13
栏目: 智能运维

在 Debian(以及一般的 Linux)下,readdir() 本身不会排序,它返回的是目录中文件的“原始顺序”(通常是文件系统内部顺序,看起来像乱序)。

如果你想要排序文件列表,常见做法有下面几种:


一、使用 readdir() + 手动排序(C 语言)

readdir() 返回 struct dirent,你需要:

  1. 读取所有目录项
  2. 存到数组
  3. 用 qsort() 排序

示例(按文件名排序)

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

int compare(const void *a, const void *b) {
    return strcmp(*(const char **)a, *(const char **)b);
}

int main() {
    DIR *dir = opendir(".");
    struct dirent *entry;
    char *names[1024];
    int count = 0;

    while ((entry = readdir(dir)) != NULL) {
        names[count++] = strdup(entry->d_name);
    }
    closedir(dir);

    qsort(names, count, sizeof(char *), compare);

    for (int i = 0; i < count; i++) {
        printf("%s\n", names[i]);
        free(names[i]);
    }
    return 0;
}

二、使用 scandir()(推荐,最简单)

scandir() 自动排序:

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

int main() {
    struct dirent **namelist;
    int n = scandir(".", &namelist, NULL, alphasort);

    for (int i = 0; i < n; i++) {
        printf("%s\n", namelist[i]->d_name);
        free(namelist[i]);
    }
    free(namelist);
    return 0;
}

✅ 默认按字母排序
✅ 不需要手动 qsort


三、Shell 层面(非 C)

如果你只是想在命令行里排序:

ls -1 | sort

或:

ls -1 /path | sort

四、常见排序方式总结

场景 方法
C 程序 scandir()
C + 自定义 readdir() + qsort()
Shell `ls
按时间 ls -lt
按大小 ls -lS

如果你能告诉我:

  • 用的是 C / C++ / Python / Shell
  • 想按 名称 / 时间 / 大小 / 自定义规则

我可以给你更精确的示例。

0 踩