Сортировка файлов по времени

У меня есть требование идентифицировать разрыв последовательности в наборе файлов. Последовательность начинается с FILENAME_0001 и заканчивается на FILENAME_9999. После этого последовательность перезапускается с 0001.

Для правильной проверки последовательности я использовал ls -rt для выбора файлов в порядке изменения времени и по сравнению с порядковым номером предыдущих файлов. Если предыдущий файл был 9999, я проверяю, будет ли следующий 0001 (для обеспечения смены последовательности).

Недавно я столкнулся с сценарием, в котором файлы были перечислены в следующем порядке:

FILENAME_0001 FILENAME_0002 FILENAME_0005 FILENAME_0003 FILENAME_0004 FILENAME_0006 FILENAME_0007 

Это связано с тем, что файлы 3, 4 и 5 имели такое же измененное время, что и второе. Только миллисекунда была другой. Поэтому я предполагаю, что ls -rt учитывает только до секунд. Может ли кто-нибудь предложить обходное решение?

2 Solutions collect form web for “Сортировка файлов по времени”

Если ваша find имеет printf , распечатайте mtime в секундах, за которой следует имя файла, затем используйте sort и, наконец, cut :

 find . -type f -printf "%T@\t%f\n" | sort -k 1n -k 2 | cut -f 2- 

Находка выводит TIMESTAMP FILENAME на каждую строку. Сортировка сначала сортирует временные метки в числовом порядке. Если отметки времени равны, он будет использовать имя файла в качестве последнего средства. Вырез удаляет метку времени с выхода.

EDIT: ваше решение perl работает, но я бы сделал это по-другому. Вот простейший:

 find . -type f -print | perl -lne 'print (((stat($_))[9]."\t".$_)' | sort -k 1n -k 2 | cut -f 2- 

Нет необходимости преобразовывать время в строку и обратно. Просто выведите stat mtime как числовое значение, как find.

Наконец, он работал. Я использовал приведенный ниже код:

 for FILENAME in $(ls...); do FILE_TIME=$(perl -e '@d=localtime ((stat(shift))[9]); printf "%4d%02d%02d%02d%02d%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]' $FILENAME) echo "$FILE_TIME $FILENAME" done | sort -k 1n -k 2 | cut -d" " -f2 

Я использую систему HP-UX.

  • Nautilus: Как сортируются файлы?
  • `echo -e 'Q \ ns \ nV' | sort` не сортирует
  • Неверный порядок с командой сортировки
  • comm: файл не находится в отсортированном порядке
  • Сортировать по столбцам
  • Сортировка .dat файлов по внутренним данным
  • сортировать строки в зависимости от дня
  • Вычислять хиты в течение промежутка времени из файла журнала
  • Сортировка числа с плавающей точкой и awk
  • ls: sort as: 1 2 12 (Side by Side)
  • сортировать и uniq в awk
  • Linux и Unix - лучшая ОС в мире.