ファイル名の特定のポイントに4桁の数字で構成されたインデックスを持つファイルのリストの番号を変更しようとします。これらのファイルは常に0001から出力を開始しますが、1001から始める必要があります。
./file_name.0001.jpg
しなければならない./file_name.1001.jpg
./file_name.0734.jpg
しなければならない./file_name.1734.jpg
- など。
私はこれに触れましたが、rename
Perlに慣れていません。例を改善すると、次のように動作すると思います。
rename -n 's/\d{4}/our $i //= 1001; ++$i/e' -- *.jpg
残念ながら、増えた頃は$iを忘れてしまったようです。
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at (user-supplied code).
ファイル名をすでに存在する名前に変更するのは安全ではありませんが、どこに行くのかわかりません。
答え1
ここでは、数字に1000を加算する必要があるようです。
rename -n -- 's/\d{4}/$& + 1000/e' *.jpg
では一致\d{4}
します。 4桁以上のシーケンスを一致させるには、他の数字で囲まれていないことを確認する必要があります。1234
1234567
\d{4}
rename -n -- 's/(?<!\d)\d{4}(?!\d)/$& + 1000/e' *.jpg
特に問題は、/
区切り文字を使用s
し、/
交換の内部で使用することです。代わりにコードが含まれている場合はs{pattern}{replacement}flags
Substituteが好きですs/pattern/replacement/flags
が、いつでも次のような他の役割を使用できます。s:pattern:replacement:flags
rename -n -- 's{\d{4}}{our $i //= 1000; ++$i}e' *.jpg
おそらくより良い選択肢は、名前を変更する前に完全であることを確認する利点がある 's をrename
使用することです。zsh
zmv
autoload -Uz zmv
i=1000; zmv -n '(*)[0-9](#c4)(*.jpg)' '$1$((++i))$2'
または4つ以上の数字を探してください。
i=1000; zmv -n '(|*[^0-9])[0-9](#c4)(([^0-9]*|).jpg)' '$1$((++i))$2'
または、数字に1000を追加します。
zmv -n '(*)([0-9](#c4))(*.jpg)' '$1$(($2 + 1000))$3'
<0-999>
1、01、0001、000000001...を含む0から999までの数字を表す一連の数字と一致します。(<0-999>~^[0-9](#c4))
0から999までの4桁の数字と一致します。