Портативный способ установить флаг ls '-v (т.е. сортировать по версии)?

Я работаю над некоторыми сценариями сборки, от которых я хотел бы зависеть только от стандартизированных функций. Мне нужно отсортировать некоторые файлы по версии. Допустим, это файлы bar-1.{0,2,3} bar-11.{0,2,3}.

По умолчанию ls дает мне:

bar-1_0
bar-11_0
bar-11_2
bar-11_3
bar-1_2
bar-1_3

Получить то, что я хочу, легко, используя 'ls -v':

bar-1_0
bar-1_2
bar-1_3
bar-11_0
bar-11_2
bar-11_3

Проблема в том, что 'ls -v' не является стандартным. В стандартной сортировке также отсутствует нужный мне вариант, хотя я мог бы глядя на старые версии спецификаций.

Может ли кто-нибудь предложить портативный способ достижения этого эффекта, кроме написания моей собственной процедуры сортировки?

Спасибо, Рис


person Rhys Ulerich    schedule 26.09.2009    source источник
comment
Где поддерживается «ls -v» для сортировки по «версии»? (GNU — ах, да!) В MacOS X есть опция '-v', но она заставляет неотредактированную печать неграфических символов.   -  person Jonathan Leffler    schedule 27.09.2009


Ответы (1)


sort -n -t- -k2, кажется, делает то, что вы хотите. -n дает вам числовую (т.е. не буквенную) сортировку; -t- устанавливает разделитель полей в -, а -k2 выбирает второе поле, то есть номер версии.

Мой sort в Ubuntu правильно выполняет даже часть с подчеркиванием, но я не уверен, что это стандарт. Чтобы быть уверенным, вы можете сначала отсортировать по младшей версии, а затем по основной версии.

person Thomas    schedule 26.09.2009