Переименование всего содержимого папки

Переименование всего содержимого папки

Я на OSX 10.9.2 (BASH 3.5) и мне нужно переименовать содержимое всей папки. Поэтому я запустил скрипт и каким-то образом закончил с этим:

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

(В начале каждого предложения есть дополнительный S01e, хотя должны были быть S01e01, S01e02...)

Как мне удалить/переименовать эти файлы, чтобы они выглядели так?:

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

Спасибо!

решение1

Не 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

Я сделал номер эпизода двухзначным с помощью команды printf.

Это просто выводит команды на stdout, так что вы можете проверить, нравится ли вам вывод. Удалите начальное "echo" из строки 4, когда вы действительно хотите переименовать.

решение2

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

Если серий 10 или больше, вы можете предпочесть, чтобы в начале чисел до 9 стоял 0. Для этого можно просто сгенерировать числа в диапазоне 100–199 и отбросить первую цифру 1.

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

Связанный контент