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 awk
solució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