Cambiar el nombre del contenido de una carpeta completa

Cambiar el nombre del contenido de una carpeta completa

Estoy en OSX 10.9.2 (BASH 3.5) y quería cambiar el nombre del contenido de una carpeta completa. Entonces ejecuté un script y de alguna manera terminé con esto:

s01eDavid.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01eDavid.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv

(Hay S01e adicional al principio de cada oración, mientras que se suponía que debía haber S01e01, S01e02.....)

¿Cómo puedo eliminar/cambiar el nombre de esos archivos para que se vean así?:

s01e1 David.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01e2 David.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01e3 David.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01e4 David.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv

¡Gracias!

Respuesta1

No es una awksolución:

cnt=1
for f in *; do 
  fcnt=$(printf "%02d" $cnt)
  echo mv "$f" "$(echo $f | sed -e "s/^s01e/&$fcnt /")"
  cnt=$(($cnt+1)); 
done

Hice que el número de episodio tuviera 2 dígitos usando el comando printf.

Esto simplemente imprime los comandos en la salida estándar, para que pueda verificar si le gusta el resultado. Elimine el "eco" inicial de la línea 4 cuando desee cambiar el nombre de verdad.

Respuesta2

episode=1
for x in s01e*; do
  mv "$x" "s01e$episode ${x#s01e}"
  episode=$((episode+1))
done

Si hay 10 o más episodios, es posible que prefieras tener un 0 inicial para los números hasta el 9. Un truco fácil para lograrlo es generar números en el rango de 100 a 199 y recortar el 1 dígito inicial.

episode=101
for x in s01e*; do
  mv "$x" "s01e${episode#1} ${x#s01e}"
  episode=$((episode+1))
done

información relacionada