重命名整个文件夹内容

重命名整个文件夹内容

我使用的是 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。一个简单的技巧是生成 100-199 范围内的数字并修剪前导 1 位数字。

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

相关内容