
У меня почти 500 каталогов, заполненных файлами с именами типа e141107140847.pdf
, и мне нужно переименовать их во что-то удобное для пользователя, например 2014_11_SDUXS_0847.pdf
. Я пытался использовать цикл for и sed, но я в тупике и не могу понять, как все это собрать. У меня также нет доступа к команде rename
на этой машине (FreeBSD).
Сопоставление выглядит следующим образом:
e
— мусорный персонаж, подлежит удалению14
— переводится какSDUXS
. Мне нужно обработать 36 различных сопоставлений.11
- месяц07
— день, подлежит удалению14
— год, который необходимо преобразовать в 4 цифры0847
— код местоположения, сохранен.
решение1
Итак, соберем все это вместе для вашего конкретного примера:
#!/bin/bash
filename='e141107140847.pdf'
echo Given file name ${filename} -
case ${filename:1:2} in
14)
mapping="SDUXS"
;;
*)
mapping="XXXXX"
;;
esac
month="${filename:3:2}"
year="20${filename:7:2}"
location="${filename:9:4}"
echo New filename - ${year}_${month}_${mapping}_${location}.pdf
кажется, дает результат, который вы ищете. Расширьте оператор case..esac
для всех ваших отображений и оберните в for filename in *.pdf
и вы можете проверить вывод; затем просто измените echo
на:
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"