Rename

如何使用格式錯誤的編號批量重命名文件?

  • March 22, 2015

我有一堆編號格式錯誤的文件:

prefix-#.ext       | for files with number 1-9
prefix-##.ext      | for files with number 10-99
prefix-###.ext     | for files with number 100-999

由於進一步處理,我需要他們所有的名字都是格式:prefix-###.ext. 有什麼簡單的方法可以做到這一點嗎?

在 Debian、Ubuntu 和衍生產品上,您可以使用renamePerl 腳本

rename 's/(?<=-)([0-9]+)/sprintf "%03d", $1/e' prefix-*.ext

某些系統可能將此命令安裝為prenameperl-rename。請注意,這不是renameutil-linux 套件中的實用程序,它沒有提供簡單的方法來執行此操作。

在 zsh 中,您可以使用zmv重命名和l 參數擴展標誌來填充零。

autoload -U zmv
zmv '(prefix-)(*)(.ext)' '$1${(l:3::0:)2}$3'

您也可以使用普通的 shell 循環來執行此操作。Shell 沒有很好的字元串操作結構;用零填充的一種方法是添加 1000 並去掉前導1

for x in prefix-*.ext; do
 n=${x%.ext}; n=${x##*-}; n=$((n+1000))
 mv "$x" "${x%-*.ext}${n#1}${x##*-}"
done

另一種方法是呼叫該printf實用程序。

for x in prefix-*.ext; do
 n=${x%.ext}; n=${x##*-}
 mv "$x" "${x%-*.ext}$(printf %03d "$n")${x##*-}"
done

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