Сортировать файлы численно в Bash

Мне нужно отсортировать файлы.flv численно, и я смог сделать это с помощью следующей команды:

ls *\.flv | sort --version-sort -f

но со многими файлами (сотнями) это неправильно сортирует.

ls *\.flv | sort --version-sort -f | tail -n 20
e680.flv
e681.flv
e682.flv
e683.flv
e684.flv
e685.flv
e686.flv
e687.flv
e688.flv
e689.flv
e690.flv
e691.flv
e692.flv
e693.flv
e694.flv
e695.flv
**e696.flv**
s572.flv
s602.flv
s654.flv

но это странно, если я разрушаю команду без "*.flv" работает. я мог бы использовать только ls, но у меня есть другие типы файлов в папке.

ls | sort --version-sort -f | tail -n 20
e680.flv
e681.flv
e682.flv
e683.flv
e684.flv
e685.flv
e686.flv
e687.flv
e688.flv
e689.flv
e690.flv
e691.flv
e692.flv
e693.flv
e694.flv
e695.flv
e696.flv

что я пробовал до сих пор:

    ls | sort --version-sort -f | grep "flv"
    ls *.flv | sort --version-sort -f
    ls *\.flv | sort --version-sort -f
    ls *.flv | sort -f

3 ответа

Решение

Я бы попробовал следующий код. Работает по моему сценарию тестирования:

ls -1 *\.flv | sort -n -k1.2

ls перечисляет FLV файлы 1 в каждой строке, sort занимает первое (и только одно) слово в каждой строке, начиная со второго символа (начало числа). Сортировка по численности

Имеется папка с последовательно именованными файлами из 1.flv в 9999.flv

ls -v1 *.flv

будет выводить:

1.flv
2.flv
...
10.flv
...
90.flv
...
100.flv
101.flv
...
9999.flv

Со страницы руководства:

    -v     natural sort of (version) numbers within text
    -1     list one file per line

Для краткости два вышеуказанных флага можно объединить -v1,

Чтобы отсортировать численно после первого символа, попробуйте это:

sort -k1.2n
Другие вопросы по тегам