温馨提示×

debian readdir怎么排序

小樊
37
2026-09-04 11:56:32
栏目: 智能运维

在 Debian(或任何 Linux)上,readdir 本身不排序,它返回目录项的顺序是文件系统决定的(通常是目录项在磁盘上的存储顺序,不一定按字母序)。

如果你想“排序”,有几种常见做法:


一、在 C 程序里用 readdir + 排序

基本思路

  1. 用 opendir / readdir 读取所有目录项
  2. 存入数组
  3. 用 qsort 排序

示例(按文件名排序)

#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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 = NULL;
    int count = 0;

    while ((entry = readdir(dir)) != NULL) {
        names = realloc(names, sizeof(char*) * (count + 1));
        names[count] = strdup(entry->d_name);
        count++;
    }
    closedir(dir);

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

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

二、忽略 . 和 ..

通常排序前要过滤:

if (strcmp(entry->d_name, ".") == 0 ||
    strcmp(entry->d_name, "..") == 0)
    continue;

三、按其他规则排序

按修改时间排序

用 stat() 读取 st_mtime 再排序

按文件大小排序

用 stat() 读取 st_size


四、Shell 层面(非 readdir)

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

ls -1 | sort
ls -lt      # 按时间
ls -lS      # 按大小

五、总结

  • readdir 不排序
  • 排序必须在用户态完成
  • 常用方式:readdir + 数组 + qsort

如果你告诉我:

  • 用 C / C++ / Python
  • 按 名字 / 时间 / 大小
  • 是否要 递归

我可以给你更精确的代码。

0 踩