为什么使用“ls -lt”列出时具有相同时间戳的文件没有按字母顺序排序?

为什么使用“ls -lt”列出时具有相同时间戳的文件没有按字母顺序排序?

我读到过,ls -lt将按修改时间对文件进行排序,然后按字典顺序排序。

但是,当我使用具有此语法的命令时,我得到以下结果:

ls -lt
total 192
-rw-r--r--  1 elfryskai  staff  6988 Aug 20 21:17 sorting_files.o
-rw-r--r--  1 elfryskai  staff  4416 Aug 20 20:56 sorting_dirs.o
-rw-r--r--  1 elfryskai  staff  6552 Aug 20 15:12 lists.o
-rw-r--r--  1 elfryskai  staff  7692 Aug 20 15:12 printing.o
-rw-r--r--  1 elfryskai  staff  7868 Aug 20 01:05 assets.o
-rw-r--r--  1 elfryskai  staff  5344 Aug 20 01:05 freeing.o
-rw-r--r--  1 elfryskai  staff  4860 Aug 20 01:05 reversing.o
-rw-r--r--  1 elfryskai  staff  8028 Aug 20 01:04 listing.o
-rw-r--r--  1 elfryskai  staff  2620 Aug 19 23:24 errors.o
-rw-r--r--  1 elfryskai  staff  3096 Aug 19 23:24 main.o
-rw-r--r--  1 elfryskai  staff  5564 Aug 19 21:07 chmod.o
-rw-r--r--  1 elfryskai  staff  7140 Aug 19 21:07 sorting.o
-rw-r--r--  1 elfryskai  staff  4760 Aug 19 21:07 parsing.o

parsing.o紧随其后sorting.o。为什么?

使用ls -lT表明这两个(加上chmod.o)具有相同的时间戳:

ls -lT
total 192
[...]
-rw-r--r--  1 elfryskai  staff  5564 Aug 19 21:07:50 2018 chmod.o
[...]
-rw-r--r--  1 elfryskai  staff  4760 Aug 19 21:07:50 2018 parsing.o
[...]
-rw-r--r--  1 elfryskai  staff  7140 Aug 19 21:07:50 2018 sorting.o
[...]

编辑:我正在运行带有 APFS 卷的 MacOS。

答案1

Apple 的最新文件系统 APFS 以纳秒而不是秒为单位存储时间戳(就像 HFS+ 曾经)。

这也许可以解释文件的不同排序,即使它们看起来是同时被修改的。

为了测试一下,请原谅我的 C 写得不好:

#include <stdio.h>
#include <sys/stat.h>

int main() {
    struct stat attr;
    stat("/path/to/file", &attr);
    printf("Last modified time: %ld", (long)&attr.st_mtime);
}

然后:

gcc -o test.o test.c && test.o

将打印:

Last modified time: 140734785103288

相关内容