Bash
如何通過刪除除數字以外的所有內容來重命名多個文件?
我想重命名文件,如:
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”混淆了。我該如何解決這個問題?
在進行替換之前刪除
.mp4
後綴。for f in *.mp4; do fname=${f%.mp4} mv -- "$f" "${fname//[^0-9]}.mp4" done
我添加
--
了以防您的文件名以 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
但請務必對其進行測試(正如您顯然所做的那樣,正如我從您的文章中看到的那樣)。