Как я могу заставить `find` находить файлы в обратном хронологическом порядке?


17

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

Я просмотрел справочную страницу, но, похоже, она позволяет фильтровать только по меткам времени, а не сортировать по меткам времени.

Какие варианты я могу передать findдля достижения этой цели? Кроме того, как я могу объединить его с другим инструментом, например, sortсортировать по отметке времени?


1
Вы не можете сделать findчто-либо в определенном порядке, кроме выбора между поиском по глубине и поиском по ширине.
Джонатан Леффлер

@ merlin2011, пожалуйста, просмотрите ваш выбор ответов здесь - выбранный в настоящее время ответ содержит ошибки (генерирует выходные данные, которые на самом деле не отсортированы правильно), когда найдено больше файлов, findчем может быть передано одному экземпляру ls.
Чарльз Даффи

@CharlesDuffy, спасибо за примечание! Я обновил принятые ответы.
merlin2011

Ответы:


32

Хотя решение Пола в целом нормально, оно требует больше операций ввода-вывода, чем просто:

find bin/ -type f -printf '%Ts\t%p\n' | sort -nr | cut -f2

Что делать, если findвозвращает миллионы файлов? Разве сортировка не собирается сортировать их как один очень длинный список? Это все еще будет эффективно? (Вместо сортировки каждого каталога по отдельности.)
Питер Мортенсен

1
Не работает с забавными персонажами в именах файлов, такими как переводы строк
Борис Бродский

2
Это заслуживает только комментария к ответу user7385, но у меня нет репутации, чтобы сделать это. find bin/ -type f -printf '%Ts\t%p\0' | sort -nrz | cut -f2 -z | xargs -0 lsНовые версии cutимеют опцию -z, поэтому имена файлов с символами новой строки будут работать.
MattBlissett

Количество операций ввода-вывода даже не является основной причиной, по которой этот ответ предпочтительнее - правильность - гораздо более важное различие. xargs -0 ls -tПодход не будет работать правильно , когда есть так много файлов , которые xargsнеобходимо начать lsболее чем один раз, но этот подход будет продолжать функционировать.
Чарльз Даффи

@PeterMortensen, «сортировка их всех как одного очень длинного списка» - единственный способ сортировки, который на самом деле возвращает правильный результат. Более того, другой / принятый ответ также не «сортирует каждый каталог независимо» (если кто-то хочет отсортировать только один каталог без рекурсии, его можно использовать -maxdepth 1в find).
Чарльз Даффи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.