如何透過刪除每個檔案名稱中不同但位於同一位置的中間 4 個字元來重新命名多個檔案?

如何透過刪除每個檔案名稱中不同但位於同一位置的中間 4 個字元來重新命名多個檔案?

我想使用 Bash 重新命名我的文件,刪除中間的 4 個字元。

原始檔名:

dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf

我想刪除中間的 4 個字母,這樣新檔案名稱將是:

dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf

4 個字母始終跟在 後面,並且檔案名稱中_始終有 1 個字母。_所有檔案名稱的長度都相同,我要刪除的四個字元位於同一位置。

我對此非常陌生,除了使用 Windows 10 之外,我不知道我正在使用的任何版本。

答案1

rename如果您有 perl-rename(在基於 Debian 的系統或其他系統上可用perl-rename),您可以執行以下操作:

$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf

導致僅列印它將執行的操作而不進行任何更改-nrename一旦您確認它按您想要的方式工作,請刪除-n並再次運行命令以實際重命名檔案:

rename 's/_..../_/' *pdf

如果因為某些原因無法使用rename,也可以使用簡單的 shell 循環來完成:

for file in *pdf; do
    echo mv -- "$file" "${file/_????/_}"
done

再次,如果您確信這能達到您想要的效果,請刪除 來echo實際重命名指令:

for file in *pdf; do
    mv -- "$file" "${file/_????/_}"
done

答案2

使用參數擴充:

$ for i in *.pdf; do
    echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
    #  actual `mv` command
    # mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
  done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf

如果您對結果感到滿意echo,請將其刪除以實際執行命令。

相關內容