Со специальным циклом bash -(для регулярного -условия проверки выражения=~
):
for file in ?-?-*-?.wav
do
[[ $file =~ ^([^[:digit:]]+)([[:digit:]]+)(-.\.wav)$ ]] &&
echo mv -- "$file" "${BASH_REMATCH[1]}$((10#${BASH_REMATCH[2]} - 1))${BASH_REMATCH[3]}"
done
При этом используется подстановочный знак для выбора нужных wav
файлов; соответствующие файлы будут иметь один символ (буква )между тире и перед .wav
в конце. Каждое имя файла проходит через регулярное выражение, которое разделяет его на три части:
^([^[:digit:]]+)
--передняя часть; все до , кроме первой цифры ([[:digit:]]+)
--цифра (с)(-.\.wav)
--задняя часть Если совпадение удается, мы переименовываем файл, используя начальную часть, цифры минус один и конечную часть.
Удалите echo
, если вывод выглядит правильно.