3

Как я могу сгенерировать список файлов в каталоге [например, "/mnt/hdd/PUB/"], упорядоченный по времени модификации файлов? [в порядке убывания, самый старый измененный файл находится в конце списков]

ls -A -lRt было бы здорово: https://pastebin.com/raw.php?i=AzuSVmrJ

Но если файл изменяется в каталоге, в нем указывается полный каталог, поэтому вставляемая ссылка не годится [Мне не нужен список, упорядоченный по "каталогам", мне нужен упорядоченный список "на файл"]

ОС: OpenWrt [нет Perl -> недостаточно места для него :( + нет команды "stat" или "file"].

3 ответа3

1

Используйте поиск и сортировку:

find YOUR_START_DIR -type f -print0 |
    xargs -r -0 ls -l | 
        sort -k 6.2,6.5nr \
             -k 6.7,6.8nr \
             -k 6.10,6.11nr \
             -k 7.2,7.3nr \
             -k 7.5,7.6nr

длинный список из k опций после сортировки определяет год, месяц, день, час и минуты как ключи сортировки и упорядочивает их в указанном порядке.

Файлы, сохраненные в одну и ту же минуту, не будут упорядочены. Если вы хотите перейти к секундам и более, добавьте «--full-time» к команде ls и добавьте новые ключи в конце команды сортировки.

0

Вот уродливый ответ, который частично работает для меня в Cygwin:

 ls -A -lRt --full-time | sort | uniq | grep -v '^total\|:$'
  • Рекурсивно перечисляет файлы, отображает полные метки времени для каждого файла
  • сортирует их
  • отбрасывает дубликаты
  • Вытаскивает несколько не файловых записей, таких как "Всего файлов в каталоге X" и строки заголовков для файлов, в которые вы рекурсивно обращаетесь.
0

"Изменение" файла в каталоге вполне может обновить время модификации каталога. Но если вас не интересуют каталоги, выведите их из списка:

ls -AlRt | egrep -v '^d'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .