
Tenho quase 500 diretórios cheios de arquivos com nomes como e141107140847.pdf
e 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 rename
comando nesta máquina (FreeBSD).
O mapeamento é o seguinte:
e
— caractere de lixo, a ser removido14
- se traduz emSDUXS
. Tenho 36 mapeamentos diferentes para lidar.11
- mês07
- dia, a ser removido14
— ano, a ser convertido para 4 dígitos0847
— 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..esac
instrução para todos os seus mapeamentos e envolva-a em a for filename in *.pdf
para confirmar a saída; então é só mudar echo
para:
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"