Назад | Перейти на главную страницу

найти порядок сортировки по умолчанию для команды

каков порядок сортировки по умолчанию для записей, возвращаемых командой поиска linux?

Например, если я выдаю

find . -type f -name '*mp3' 

и вывод состоит из нескольких файлов в нескольких подпапках, в каком порядке по умолчанию перечислены каталоги? В то же время, каков порядок сортировки файлов в отдельном каталоге?

Иногда возвращается:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

Посмотрите, как сначала отображается содержимое каталога B, а затем каталога A. В то же время в каталоге A файлы перечислены в смешном порядке.

find будет перемещаться по дереву каталогов в том порядке, в котором элементы хранятся в записях каталога. Это будет (в основном) согласованным от запуска к запуску на одной и той же машине и, по сути, будет «порядком создания файла / каталога», если не было удалений.

Однако некоторые файловые системы будут переупорядочивать записи каталогов как часть операций сжатия или когда необходимо увеличить размер записи, поэтому всегда есть небольшая вероятность того, что «сырой» порядок изменится со временем. Если вам нужен постоянный порядок, пропустите вывод через дополнительный этап сортировки.

Вы не должны полагаться на конкретный порядок вывода из find и вместо этого следует использовать sort и другие средства для конкретного контроля заказа.

Я работаю в UNIX / Linux с 1984/1991 года соответственно, и первая команда, которую меня научили, была find. Linux / GNU вложил в текущую команду find почти все, что вам нужно, так что поиграйте с ней.

Вот несколько полезных советов по сортировке результатов поиска. Параметр -printf предоставляет множество параметров для включения более сложной сортировки и представления информации о файлах. Это лучший вариант для подобных задач. Поиграйте с ним, чтобы увидеть, что подойдет вам. Используя -printf, вы можете настроить и разграничить результаты так, как вам нужно. Это немного помогает, когда вам нужно опубликовать результаты. Я надеюсь, что это поможет кому-то.

  1. Если вы используете -ls и хотите отсортировать по имени файла, 11-е поле - это имя файла, поэтому вы можете сделать следующее. Параметр sort -k также может принимать несколько полей для сортировки.

    найти / путь -ls | sort -k11

  2. Если вам нужен более точный контроль, то есть сортировка по дате / времени в возрастающем или убывающем порядке, используйте параметр -printf "". См. Руководство для более подробной информации, но ниже приведен пример печати с дробными секундами, поэтому он очень точен.

ПРИМЕР ДАТА / ВРЕМЯ: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

Другой способ сделать это без символов в строке даты / времени -.

ПРИМЕР ДАТА / ВРЕМЯ: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n