フルフォルダの内容の名前変更

フルフォルダの内容の名前変更

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コマンドを使用してエピソード番号を2桁に設定しました。

これはコマンドを標準出力として印刷するので、出力が好きかどうかを確認できます。実際に名前を変更するには、行4から先行する「echo」を削除します。

答え2

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

エピソードが10以上の場合は、前にゼロが付いた最大9つの数字を好むことができます。簡単な方法は、100〜199の範囲の数字を生成し、前の1桁を切り取ることです。

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

関連情報