Zsh
使用數字模式按字典順序重命名文件,該數字模式隨著固定填充順序增加
我有諸如
a bb ccc abc emrls
我想重命名它們,以便在對它們進行排序後(例如,按字典順序),每個文件都獲得以下名稱:
00001 00002 00003 etc
其中 0 填充的位數是先驗指定的,例如在上述情況下為 6(假設我們知道需要多少位數)。
由於我最熟悉的 shell 是
zsh
,因此我對受益於 on 特性的解決方案感興趣zsh
(也許使用zsh
’szmv
?)。我也會對與 Bash 兼容的解決方案感興趣。
您可以使用
l
參數擴展標誌在左側填充一個數字。i=0; for x in *; do ((++i)); mv -- $x new/${(l:6::0:)i}; done
有一種相對簡單的方法可以僅使用 POSIX 功能:從 1000001(6 位數字)而不是 1 開始編號,並去掉前導的
1
. 它不那麼簡單,但幾個字元更短。i=1000000; for x in *; do i=$((i+1)); mv -- "$x" new/${i#1}; done
如果您想利用
zmv
,可以使用i
在替換文本內遞增的算術表達式。i=0; zmv '*' '${(l:6::0:)$((++i))}' i=1000000; zmv '*' '${$((++i))#1}'
如果您需要以不同的順序對文件進行排序,請添加
o
glob 限定符。使用,當模式包含 glob 限定符時zmv
,您需要傳遞-Q
標誌。