myk*_*eli 3 shell bash filenames rename
我想重命名文件,如:
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
Run Code Online (Sandbox Code Playgroud)
但是这个
for f in *.mp4; do echo mv "$f" "${f//[^0-9]/}.mp4"; done
Run Code Online (Sandbox Code Playgroud)
在末尾添加“4”:
1364.mp4
1374.mp4
1384.mp4
0744.mp4
0824.mp4
1124.mp4
Run Code Online (Sandbox Code Playgroud)
我认为它与“mp4”中的“4”混淆。我该如何解决这个问题?
.mp4在进行替换之前删除后缀。
for f in *.mp4; do
fname=${f%.mp4}
mv -- "$f" "${fname//[^0-9]}.mp4"
done
Run Code Online (Sandbox Code Playgroud)
我添加--以防您的文件名以 a 开头-并删除了echo. 当心。
你是对的4,出现的是mp4扩展名。原因是您正在处理语句中的完整文件名,${f//[^0-9]/}以删除所有出现的非数字字符,其中包括.mp部分并4从结尾离开。
您可以sed出于以下目的使用:
for f in *.mp4; do
newname="$(sed 's/^[^0-9]*//' <<< "$f")"
mv "$f" "$newname"
done
Run Code Online (Sandbox Code Playgroud)
但一定要对其进行测试(正如您显然所做的那样,正如我从您的帖子中看到的那样)。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |