Perlの名前変更を使用して、特定の値から始めてファイルのリスト番号を変更します。

Perlの名前変更を使用して、特定の値から始めてファイルのリスト番号を変更します。

ファイル名の特定のポイントに4桁の数字で構成されたインデックスを持つファイルのリストの番号を変更しようとします。これらのファイルは常に0001から出力を開始しますが、1001から始める必要があります。

  • ./file_name.0001.jpgしなければならない./file_name.1001.jpg
  • ./file_name.0734.jpgしなければならない./file_name.1734.jpg
  • など。

私はこれに触れましたが、renamePerlに慣れていません。例を改善すると、次のように動作すると思います。

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桁以上のシーケンスを一致させるには、他の数字で囲まれていないことを確認する必要があります。12341234567\d{4}

rename -n -- 's/(?<!\d)\d{4}(?!\d)/$& + 1000/e' *.jpg

特に問題は、/区切り文字を使用sし、/交換の内部で使用することです。代わりにコードが含まれている場合はs{pattern}{replacement}flagsSubstituteが好きですs/pattern/replacement/flagsが、いつでも次のような他の役割を使用できます。s:pattern:replacement:flags

rename -n -- 's{\d{4}}{our $i //= 1000; ++$i}e' *.jpg

おそらくより良い選択肢は、名前を変更する前に完全であることを確認する利点がある 's をrename使用することです。zshzmv

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桁の数字と一致します。

関連情報