
Tengo casi 500 directorios llenos de archivos con nombres como e141107140847.pdf
y necesito cambiarles el nombre a algo fácil de usar como 2014_11_SDUXS_0847.pdf
. He estado intentando usar un bucle for y sed, pero estoy perdido y no puedo entender cómo juntar todo. Tampoco tengo acceso al rename
comando en esta máquina (FreeBSD).
El mapeo es el siguiente:
e
— carácter basura, para ser eliminado14
- se traduce comoSDUXS
. Tengo 36 asignaciones diferentes para manejar.11
- mes07
— día, para ser eliminado14
— año, para convertir a 4 dígitos0847
— código de ubicación, conservado.
Respuesta1
Entonces, combine esto para su ejemplo 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 el resultado que buscas. Expanda la case..esac
declaración para todas sus asignaciones y envuélvala en a for filename in *.pdf
y podrá confirmar el resultado; luego simplemente cambie a echo
:
mv "$filename" "${year}_${month}_${mapping}_${location}.pdf"