我想重命名文件,例如:
SL Benfica vs. SC Beira-Mar 136.mp4
SL Benfica vs. SC Beira-Mar 137.mp4
SL Benfica vs. SC Beira-Mar 138.mp4
SL Benfica vs. SC Beira-Mar Jogo 074.mp4
SL Benfica vs. SC Beira-Mar Jogo 082.mp4
SL Benfica vs. SC Beira-Mar Jogo 112.mp4
但是这个
for f in *.mp4; do echo mv "$f" "${f//[^0-9]/}.mp4"; done
在末尾添加“4”:
1364.mp4
1374.mp4
1384.mp4
0744.mp4
0824.mp4
1124.mp4
我认为它与“mp4”中的“4”混淆了。我该如何解决这个问题?
答案1
.mp4
在进行替换之前删除后缀。
for f in *.mp4; do
fname=${f%.mp4}
mv -- "$f" "${fname//[^0-9]}.mp4"
done
我添加了--
以防万一您的文件名以 a 开头-
并删除了echo
.当心。
答案2
你是对的,4
出现的就是来自mp4
扩展程序。原因是您正在处理满的filename${f//[^0-9]/}
语句中删除所有出现的非数字字符,其中包括该.mp
部分并保留4
结尾处的 。
您可以用于sed
以下目的:
for f in *.mp4; do
newname="$(sed 's/^[^0-9]*//' <<< "$f")"
mv "$f" "$newname"
done
但一定要测试它(正如你显然所做的那样,正如我从你的帖子中看到的那样)。
答案3
使用prename
你可以运行一些类似的东西
prename 's/^\D*//' *.mp4
笔记:
\D
非数字^\D*
文件名开头的非数字序列s/^\D*//
删除开头的非数字,并重命名
在某些 Linux 发行版(例如 Ubuntu)中,该命令称为rename
,而在其他发行版(例如 Arch)中,该命令称为perl-rename
。