重新命名整個資料夾內容

重新命名整個資料夾內容

我使用的是 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 以內的數字前導 0。

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

相關內容