答案1
使用 bash 的內建子字串擴充:
for f in 2015* ; do
mv "$f" "${f::4}-${f:4:2}-${f:6}"
done
答案2
和sed
:
LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file
答案3
雖然rename
它是一個非常強大的工具,但我通常更喜歡它的簡單性mmv
(多次移動)實用程序:
mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'
搜尋模式中的?
代表單一字符,*
代表任意長的字符序列。在替換模式中,every#<number>
代表搜尋模式中對應的?
or 。*
除了 和 之外?
,*
還mmv
支援括號內的字元範圍(如[a-f]
)。
(mmv
將在開始工作之前測試重命名中的任何衝突,這樣您就不會因為覆蓋而丟失檔案。)
答案4
在我的發行版上,我有一個perl-rename
指令,它可以使用 perl 樣式的正規表示式來批次重命名檔案。此rename
指令僅接受一對固定字串進行重命名。