我使用的是 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