Cambiar el nombre y reorganizar varios nombres de archivos sin cambiar el nombre

Cambiar el nombre y reorganizar varios nombres de archivos sin cambiar el nombre

Tengo casi 500 directorios llenos de archivos con nombres como e141107140847.pdfy 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 renamecomando en esta máquina (FreeBSD).

El mapeo es el siguiente:

  • e— carácter basura, para ser eliminado
  • 14- se traduce como SDUXS. Tengo 36 asignaciones diferentes para manejar.
  • 11- mes
  • 07— día, para ser eliminado
  • 14— año, para convertir a 4 dígitos
  • 0847— 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..esacdeclaración para todas sus asignaciones y envuélvala en a for filename in *.pdfy podrá confirmar el resultado; luego simplemente cambie a echo:

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

información relacionada