Не уверен, что переименование файлов является одним из ваших ожиданий.По крайней мере, для сортировки только имени файла вам не нужно.
Вы можете сделать это только с помощью команды GNU sort
:
sort -t- -k5.4 -k3.1,3.4 -k2.1,2.1 -k1.1,1.2 -k3.6,3.13 <(printf "%s\n" *.txt)
-t
устанавливает разделитель полейдо тире -
.
-k
позволяет сортировать по полям.Как объяснено на странице man sort
, синтаксис: -k<start>,<stop>
, где <start>
или состоит из <field number>.<position>
.Добавление в команду нескольких опций -k
позволяет сортировать по нескольким полям;первый в командной строке имеет больший приоритет, чем другой.
Например, первый -k5.4
указывает сортировать по 5-м полям со смещением в 4 символа.Поле остановки отсутствует, потому что это конец имени файла.
Опция -k3.1,3.4
сортирует на основе 3-го поля, начиная со смещения от 1 до 4.
Тот же принцип применяется к другим опциям -k
.
В вашем примере поле месяца имеет только 1 цифру.Если у вас есть файлы с кодом месяца, состоящим из 2 цифр, вы можете добавить 0 к именам всех месяцев.Это можно сделать, добавив в оператор printf
этот <(... | sed 's/-0\?\([0-9]\)/-0\1/')
и изменив -k 2.1,2.1
на -k2.1,2.2
.