Renomeando e reorganizando vários nomes de arquivos sem renomear

2

Tenho quase 500 diretórios cheios de arquivos com nomes como e141107140847.pdf e preciso renomeá-los para algo amigável como 2014_11_SDUXS_0847.pdf . Eu tenho tentado usar um loop for e sed, mas eu estou em cima da minha cabeça e não consigo descobrir como colocar tudo junto. Eu também não tenho acesso ao comando rename nesta máquina (FreeBSD).

O mapeamento é o seguinte:

  • e - caractere de lixo, a ser removido
  • 14 - traduz para SDUXS . Eu tenho 36 mapeamentos diferentes para lidar.
  • 11 - mês
  • 07 - dia, a ser removido
  • 14 - ano, a ser convertido em 4 dígitos
  • 0847 - código de localização, mantido.
por Alan Techsmith 02.06.2017 / 16:36

1 resposta

2

Então, vamos juntar 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 instrução case..esac para todos os seus mapeamentos e agrupe em for filename in *.pdf e você poderá confirmar a saída; então apenas mude o echo para:

mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"
    
por 02.06.2017 / 17:49