固定パディング順に増加する数値パターンを使用して辞書形式でファイル名を変更する

固定パディング順に増加する数値パターンを使用して辞書形式でファイル名を変更する

このようなファイルがあります。

a
bb
ccc
abc
emrls

ソートした後(辞書式など)、各ファイルの名前が次のように名前を変更したいと思います。

00001
00002
00003
etc

0で埋められた数字は、上記の場合は6のように事前に指定されています(必要な数字がわかっていると仮定)。

私が一番好きなシェルなので、(おそらく 's ?を使って)機能を活用するzshソリューションに興味があります。また、Bash互換ソリューションにも興味があります。zshzshzmv

答え1

あなたはそれを使用することができますl パラメータ拡張フラグ左側に数字を入力してください。

i=0; for x in *; do ((++i)); mv -- $x new/${(l:6::0:)i}; done

POSIX機能のみを使用してこれを実行する比較的簡単な方法があります。 1の代わりに1000001(6桁の数字)で番号付けを開始して先行します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修飾子が含まれている場合は、zmvフラグを渡す必要があります。-Q

答え2

このbashスニペットを使用してください。

[centos@centos new]$ touch a bb ccc dddd eee f gh i
[centos@centos new]$ touch abc emrls cdg sf
[centos@centos new]$ touch ABC A BB CCC DD GI KLM kmna kabc mas nas san fin zoo
[centos@centos new]$ \ls -1
a
A
abc
ABC
bb
BB
ccc
CCC
cdg
DD
dddd
eee
emrls
f
fin
gh
GI
i
kabc
KLM
kmna
mas
nas
san
sf
zoo
[centos@centos new]$ a=0; for i in *; do a=$(($a+1));  b=`printf "%06d" $a`; mv -v ${i} ${b};  done
`a' -> `000001'
`A' -> `000002'
`abc' -> `000003'
`ABC' -> `000004'
`bb' -> `000005'
`BB' -> `000006'
`ccc' -> `000007'
`CCC' -> `000008'
`cdg' -> `000009'
`DD' -> `000010'
`dddd' -> `000011'
`eee' -> `000012'
`emrls' -> `000013'
`f' -> `000014'
`fin' -> `000015'
`gh' -> `000016'
`GI' -> `000017'
`i' -> `000018'
`kabc' -> `000019'
`KLM' -> `000020'
`kmna' -> `000021'
`mas' -> `000022'
`nas' -> `000023'
`san' -> `000024'
`sf' -> `000025'
`zoo' -> `000026'
[centos@centos new]$ 

関連情報