У меня есть папка с большим количеством файлов (различные журналы, сгенерированные на веб-сайте).
Умело рассчитывать их с помощью:
$ find . -maxdepth 1|wc -l
803313
Теперь мне нужно проверить журналы в последние несколько дней. Получение последних 100/1000 / ... файлов так же хорошо. Проблема в том, что приведенная выше команда заняла около 5 секунд. Таким образом, у почти 1 миллиона файлов мой обычный ls -lrt|tail -n 100 не является вариантом.
Итак, любые идеи о том, как эффективно получать последние измененные файлы?
PS: Использование Ubuntu 12.04 LTS
Вы можете использовать printf для печати даты, %T@ дает время модификации, как временная метка unix:
find . -type f -printf "%T@ %p\n" | sort -rn | head -n 10
В папке с 250 000 файлами требуется 10 секунд.
Sidenote: для быстрого поиска самого последнего файла вы можете использовать
find . -type f -printf "%T@\0%p\0" | gawk ' { if ($0>max) { max=$0; getline mostrecent } else getline } END{print mostrecent}' RS='\0'
. Это занимает менее 2 секунд на 250 000 файлов.