Почему файлы с одинаковой отметкой времени не сортируются в алфавитном порядке при перечислении с помощью «ls -lt»?

231
elfryskai

Я читал, что 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 [...] 

РЕДАКТИРОВАТЬ: я использую MacOS с томом APFS.

1
Какую файловую систему вы используете здесь? (Я предполагаю, что macOS из-за имени группы пользователей, но это HFS + или APFS?) slhck 5 лет назад 1
@slhck У меня есть том APFS elfryskai 5 лет назад 0
Возможно, разрешение этих временных меток лучше, чем одна секунда. Что говорит `stat parsing.o sorting.o`? Kamil Maciorowski 5 лет назад 0
16777220 3117665 -rw -r - r-- 1 elfryskai staff 0 4760 "20 августа 21:17:54 2018" "19 августа 21:07:50 2018" "19 августа 21:07:50 2018" "19 августа 21 : 07: 50 2018 "4194304 16 0 parsing.o 16777220 3117667 -rw-r - r-- 1 elfryskai staff 0 7140" 19 августа 23:44:10 2018 "" 19 августа 21:07:50 2018 "" августа 19 21:07:50 2018 "" 19 августа 21:07:50 2018 "4194304 16 0 sorting.o elfryskai 5 лет назад 0

1 ответ на вопрос

2
slhck

Последняя файловая система 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 
Добавлен хакерский пример для получения меток времени, которые вы можете проверить в вашем случае. slhck 5 лет назад 0
Спасибо за подсказку, ваш код, к сожалению, не сработал для меня, но, ища вещи таким образом, я обнаружил, что в st_mtime есть структура с наносекундами -> attr.st_mtimespec.tv_nsec. elfryskai 5 лет назад 0