Bash

如何通過刪除除數字以外的所有內容來重命名多個文件?

  • July 1, 2020

我想重命名文件,如:

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

但請務必對其進行測試(正如您顯然所做的那樣,正如我從您的文章中看到的那樣)。

引用自:https://unix.stackexchange.com/questions/596129