LINUX.ORG.RU

find выдаёт по разному отсортированный результат

 , ,


0

1

на одном и том-же наборе файлов на разных ПК.
Вероятно это нормально и надо добавлять ... | sort.
Или есть нюанс?

★★★★★

Последнее исправление: superuser (всего исправлений: 5)

Да. find ищет файлы, а не сортирует, это лишняя работа о которой не просили. Он обходит директорию так, как там лежат файлы, а это в большинстве ФС не упорядоченная последовательность.

legolegs ★★★★★
()
Ответ на: комментарий от papin-aziat

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

firkax ★★★★★
()

Оффтоп. Ага, был такой смешной прикол, когда в glibc изменился collation. Весело было мигрировать всякие там БД :) postgres прям кое-где отвалился (надо было индексы перестраивать). Хорошая тема, знаем. А DBA так и живо помнят :)

Не с этим ли связано то, что сортировка в выхлопе команды разная? :)

paddlewan
()
Ответ на: комментарий от superuser

Именно так. Попробуйте на досуге сделать ls в директории на пару десятков миллионов файлов и find. ls при помощи опций тоже можно попросить не заниматься сортировкой, но по дефолту оно сортирует :(

cobold ★★★★★
()
Ответ на: комментарий от papin-aziat

Может она и делает то же самое но в мане что-то странное написано.

ls -al /bin/[s-y]h находит sh

ls -al /bin/[S-Y]h не находит sh

от команды shopt -s globasciiranges вышеописанное не меняется.

firkax ★★★★★
()
Ответ на: комментарий от legolegs

это лишняя работа о которой не просили

С одной стороны да, с другой — сортировка на этапе обхода дерева каталогов должна быть дешевле, чем для плоского списка файлов, т.к. нет необходимости держать весь список в памяти.

Плюс предсказуемость сама по себе является ценным качеством. Может и стоит ради этого сделать лишнюю работу.

Zeta_Gundam
()
Последнее исправление: Zeta_Gundam (всего исправлений: 1)
Ответ на: комментарий от firkax

В доке описание какое-то непонятное. Но мне кажется, что эта часть:

b will not collate between A and B

указывает на то, что сортировка не будет A b B (естественной). То есть опция отменяет эффекты локали, а без них будет использоваться ASCII, в котором A B Z b.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)