テキストを保持しながら番号付きファイルの名前を変更する

テキストを保持しながら番号付きファイルの名前を変更する

ファイルセットの名前を変更しようとしています。ファイルには次の形式があります。

frame\[d]+_object.bin

私のファイルの番号は1から1500までで、ファイル名を100から199まで変更したいと思います。

私は次のrenameコマンドを試しました

rename -n 's/frame1[\d]{2}_/sprintf("%05d", $&)/e' *.bin

他の目的に使用する他のコマンドを適用しましたが、出力は次のようになります。

frame198_simobject0.bin -> 00000simobject0.bin
frame199_simobject0.bin -> 00000simobject0.bin

コマンドの代替ルールがどのように機能するかはよく理解されていないので、ここで役に立ちます。

答え1

$&frame先頭と末尾の文字列を含む、一致する完全な文字列です_。数値ではないため、%05d失敗に応じて書式設定を試みます。

あなたは次のようなものが欲しいかもしれませんs/frame(1\d{2})_/sprintf("frame%05d_", $1)/e

前任者。

$ rename -n 's/frame(1\d{2})_/sprintf("frame%05d_", $1)/e' *.bin
rename(frame198_simobject0.bin, frame00198_simobject0.bin)
rename(frame199_simobject0.bin, frame00199_simobject0.bin)

[...]文字範囲を括弧で囲む必要はありません\d

答え2

ファイルのサブセット名のみを変更したい場合は、簡単な解決策は次のようにすることです。それらファイルを.soに変換しますrename。したがって、使用しないでください*bin。使用しないでください。支柱の拡張、正しい名前のファイルのみを選択するには:

rename -n 's/frame(\d+)_/sprintf("%05d", $1)/e'  frame{100..199}_simobject0.bin

関連情報