каков порядок сортировки по умолчанию для записей, возвращаемых командой linux find?
Например, если я выдаю
find . -type f -name '*mp3'
и вывод состоит из нескольких файлов в нескольких подпапках. Каков порядок по умолчанию, в котором перечислены каталоги? В то же время, каков порядок сортировки, в котором перечислены файлы в отдельном каталоге?
Иногда это возвращает:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
Посмотрите, как сначала перечисляется содержимое каталога B, затем содержимое каталога A. В то же время в каталоге A файлы перечислены в смешном порядке.
-s
параметр для сортировки по алфавиту.Ответы:
find
будет проходить по дереву каталогов, в котором элементы заказа хранятся в записях каталогов. Это (в основном) будет согласованным от запуска к запуску на одном и том же компьютере и, по сути, будет «порядком создания файла / каталога», если не было удалений.Однако некоторые файловые системы будут переупорядочивать записи каталога как часть операций сжатия или когда необходимо увеличить размер записи, поэтому всегда существует небольшая вероятность того, что «сырой» порядок изменится со временем. Если вы хотите последовательный порядок, пропустите вывод через дополнительный этап сортировки.
источник
find /path/ -exec ...
с гораздо более быстрым выполнением,find /path/
чтобы сначала получить отсортированный список файлов.Вы не должны полагаться на конкретный порядок вывода,
find
а вместо этого должны использоватьsort
и другие средства для конкретного управления порядком.источник
Я работаю в UNIX / Linux с 1984/1991 года соответственно, и первая команда, которой меня научили, была команда find. Linux / GNU поместил почти все, что вам нужно, в текущую команду поиска, так что поиграйте с ней.
Вот несколько полезных советов по сортировке результатов поиска. Опция -printf предоставляет вам множество опций для более сложной сортировки и представления информации о файле. Это лучшее для таких проблем. Поиграйте с ним, чтобы увидеть, что будет работать для вас. Используя -printf вы можете настроить и разграничить результаты так, как вы хотите. Это очень помогает, когда вам нужно опубликовать результаты обработки. Я надеюсь, что это помогает кому-то.
Если вы используете -ls и хотите отсортировать по имени файла, 11-е поле - это имя файла, поэтому вы можете сделать следующее. Опция sort -k также может принимать несколько полей для сортировки.
найти / путь -ls | сортировка -k11
Если вы хотите более точный контроль зернистости по дате / времени в порядке возрастания или убывания, используйте опцию -printf "". См. Руководство для получения более подробной информации, но ниже приведен пример, который будет печататься за доли секунды, поэтому он очень точный.
ПРИМЕР. ДАТА / ВРЕМЯ: 2016-09-17 + 12: 09: 57.9013929800
Другой способ сделать это без символов в строке даты / времени -.
ПРИМЕР ДАТА / ВРЕМЯ: 20160917120013.8101685040
источник