4

В настоящее время я использую ls -t | head -1 чтобы получить имя самого нового файла. Но это занимает много времени, потому что мой каталог содержит миллион файлов. Я предполагаю, что часть времени теряется без необходимости в ls -t когда он выводит список из миллиона файлов, все, кроме первого, все равно будут отклонены.

Есть ли более быстрый способ? Например, какой-нибудь способ напрямую сказать ls выводить только первую строку?

1 ответ1

1

Могу поспорить, что все время тратится на сравнение дат создания файлов: хотя это не совсем пропорционально N ^ 2 (на самом деле это похоже на N log N для интеллектуальных алгоритмов сортировки), это все еще довольно долго.

Следующая команда

  find . -type f -printf '%T+ %p\n' | sort -r | head -1

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

Это может быть удобно модифицировано, например, следующим образом:

  find . -type f -mtime -1 -printf '%T+ %p\n' | sort -r | head -1

Эта команда находит только файлы, созданные в последний день (-mtime -1), и сортирует только эти. Надеюсь, этого должно быть достаточно, чтобы ограничить поиск небольшим количеством предметов.

если вам нужен более точный контроль, вы можете использовать:

  find . -type f -mmin -5 -printf '%T+ %p\n' | sort -r | head -1

который, например, выбирает только файлы, созданные / измененные менее 5 минут назад (-mmin -5).

Таким образом, порядок ограничен управляемым количеством объектов. При необходимости для удобства ввода команда может быть псевдонимом или сценарием.

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