Регулярка на переименование файлов

Рейтинг: 0Ответов: 2Опубликовано: 09.03.2023

Есть много файлов примерно такого вида 54757812_a_bb_cc_33_xx_zz.png, пытаюсь их переименовать в линукс так, чтобы в итоге получилось 54757812.png.

Использую команду rename с такой регуляркой:

rename 's/\D*.png/.png/g' *

Но в итоге получаю 54757812_a_bb_cc_33.png. То есть удаляется все, что после 33.

Подскажите, как сделать, чтобы в итоге осталось 54757812.png?

Ответы

▲ 2Принят

Попробуйте следующим образом:

rename 's/_.*/.png/' *.png

Смысл такой: заменить весь текст после первого _ на .png.

Например, файл 54757812_a_bb_cc_33_xx_zz.png будет переименован в 54757812.png.

▲ 0
/(\d+)_.*(\.\w+)/

Любое число \d+, после которого идёт _, после которого идут любые символы .*, после которых идёт точка с расширением \.\w+. Регулярное выражение возвращает две скобочные группы - любое число и расширение. Их нужно склеить, чтобы в итоге получить имя файла