Zsh

使用數字模式按字典順序重命名文件,該數字模式隨著固定填充順序增加

  • April 5, 2019

我有諸如

a
bb
ccc
abc
emrls

我想重命名它們,以便在對它們進行排序後(例如,按字典順序),每個文件都獲得以下名稱:

00001
00002
00003
etc

其中 0 填充的位數是先驗指定的,例如在上述情況下為 6(假設我們知道需要多少位數)。

由於我最熟悉的 shell 是zsh,因此我對受益於 on 特性的解決方案感興趣zsh(也許使用zsh’s zmv?)。我也會對與 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標誌。

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