Здравствуйте!
Есть прозвольное множество файлов вида:
№ 444-П от 28.11.2014 О внесении изменений в № 22-п от 23.01.13.doc
№ 4-Р от 28.11.2014 О внесении изменений в № 22-р от 23.01.13.docx
№ 2-П от 18.11.2016 Оваприарпарпаррв № 22-п от 13.01.13.doc
Их нужно переименовать в файлы вида:
444-p_28.11.14.doc
4-r_28.11.14.docx
2-p_18.11.16.doc
Т.е. (порядок слева-направо)
1) на входе произвольное количество произвольных символов до первой цифры удаляется
2) после цифр (от одной до четырех, т.е 1,2,3,...29,28,...1294,9999) и символа — удаляется все символы снова до первой цифры.
3) если после символа - была буква П (кириллица), то она заменяется на p (латиница). Если после символа - была буква Р (кириллица), то она заменяется на r (латиница). После замены добавляется символ _.
4) сокращение даты, если она имеет вид дд.мм.гггг в дд.мм.гг.
5) удаление всех символов (включая пробелы) до расширения.
Есть идеи, как реализовать?
накостылил скрипт:
#!/bin/bash
shopt -s nullglob
for NAME in * ; do
TRS=`echo $NAME | sed "y///"`
TRS=`echo $TRS | sed "y///"`
TRS=${TRS//№/}
TRS=${TRS// /}
TRS=${TRS//../.}
TRS=${TRS//П/p}
TRS=${TRS//Р/r}
TRS=${TRS//п/p}
TRS=${TRS//р/r}
TRS=${TRS//й/}
TRS=${TRS//ц/}
TRS=${TRS//у/}
TRS=${TRS//к/}
TRS=${TRS//е/}
TRS=${TRS//н/}
TRS=${TRS//г/}
TRS=${TRS//ш/}
TRS=${TRS//щ/}
TRS=${TRS//з/}
TRS=${TRS//х/}
TRS=${TRS//ъ/}
TRS=${TRS//ф/}
TRS=${TRS//ы/}
TRS=${TRS//в/}
TRS=${TRS//а/}
TRS=${TRS//о/}
TRS=${TRS//л/}
TRS=${TRS//д/}
TRS=${TRS//ж/}
TRS=${TRS//э/}
TRS=${TRS//я/}
TRS=${TRS//ч/}
TRS=${TRS//с/}
TRS=${TRS//м/}
TRS=${TRS//и/}
TRS=${TRS//т/}
TRS=${TRS//ь/}
TRS=${TRS//б/}
TRS=${TRS//ю/}
TRS=${TRS//Й/}
TRS=${TRS//Ц/}
TRS=${TRS//У/}
TRS=${TRS//К/}
TRS=${TRS//Е/}
TRS=${TRS//Н/}
TRS=${TRS//Г/}
TRS=${TRS//Ш/}
TRS=${TRS//Щ/}
TRS=${TRS//З/}
TRS=${TRS//Х/}
TRS=${TRS//Ъ/}
TRS=${TRS//Ф/}
TRS=${TRS//Ы/}
TRS=${TRS//В/}
TRS=${TRS//А/}
TRS=${TRS//О/}
TRS=${TRS//Л/}
TRS=${TRS//Д/}
TRS=${TRS//Ж/}
TRS=${TRS//Э/}
TRS=${TRS//Я/}
TRS=${TRS//Ч/}
TRS=${TRS//С/}
TRS=${TRS//М/}
TRS=${TRS//И/}
TRS=${TRS//Т/}
TRS=${TRS//Ь/}
TRS=${TRS//Б/}
TRS=${TRS//Ю/}
TRS=${TRS//p/p_}
TRS=${TRS//r/r_}
TRS=${TRS//(/}
TRS=${TRS//)/}
TRS=${TRS//__/}
TRS=${TRS//.201/.1}
mv -v "$NAME" "$TRS"
if [[ `file -b "$TRS"` == directory ]]; then
cd "$TRS"
"$0"
cd ..
fi
done
Переименовывает почти как нужно, получились файлы вида:
64-p_22.02.17.r_r_p_p_r_-.doc
366-p_27.02.17.r_p_r_p_r_p_.doc
1267-p_27.02.17.p_25.10.16.461-p_.doc
Осталось только убрать символы после второй точки и двух цифр до расширения, чтобы получилось:
64-p_22.02.17.doc
366-p_27.02.17.doc
1267-p_27.02.17.doc
Скрипт - костыль, может кто подскажет, как правильно?