Renomear e reorganizar vários nomes de arquivos sem renomear

Renomear e reorganizar vários nomes de arquivos sem renomear

Tenho quase 500 diretórios cheios de arquivos com nomes como e141107140847.pdfe preciso renomeá-los para algo fácil de usar, como 2014_11_SDUXS_0847.pdf. Tenho tentado usar um loop for e sed, mas estou confuso e não consigo descobrir como juntar tudo. Também não tenho acesso ao renamecomando nesta máquina (FreeBSD).

O mapeamento é o seguinte:

  • e— caractere de lixo, a ser removido
  • 14- se traduz em SDUXS. Tenho 36 mapeamentos diferentes para lidar.
  • 11- mês
  • 07- dia, a ser removido
  • 14— ano, a ser convertido para 4 dígitos
  • 0847— código de localização, mantido.

Responder1

Então, juntando isso para o seu exemplo específico:

#!/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

parece dar o resultado que você procura. Expanda a case..esacinstrução para todos os seus mapeamentos e envolva-a em a for filename in *.pdfpara confirmar a saída; então é só mudar echopara:

mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"

informação relacionada