Renomeando o conteúdo de uma pasta inteira

1

Estou no OSX 10.9.2 (BASH 3.5) e queria renomear nomes de conteúdo de pastas inteiras. Então eu corro um script e de alguma forma termino com isso:

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

(Há extra S01e no início de cada sentença enquanto deveria ser o S01e01, S01e02 .....)

Como posso remover / renomear esses arquivos para que pareçam assim?:

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

Obrigado!

    
por user67486 13.05.2014 / 09:04

2 respostas

1

Não é uma solução awk :

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

Eu fiz o número do episódio ter 2 dígitos usando o comando printf.

Isto apenas imprime os comandos para stdout, para que você possa verificar se gosta da saída. Remova o "eco" inicial da linha 4 quando quiser renomear para real.

    
por 13.05.2014 / 09:42
0
episode=1
for x in s01e*; do
  mv "$x" "s01e$episode ${x#s01e}"
  episode=$((episode+1))
done

Se houver 10 ou mais episódios, você pode preferir ter um 0 à esquerda para números até 9. Um truque fácil para isso é gerar números no intervalo de 100 a 199 e cortar o primeiro dígito.

episode=101
for x in s01e*; do
  mv "$x" "s01e${episode#1} ${x#s01e}"
  episode=$((episode+1))
done
    
por 14.05.2014 / 03:14