Переименование и изменение порядка нескольких имен файлов без переименования

Переименование и изменение порядка нескольких имен файлов без переименования

У меня почти 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"

Связанный контент