ファイルセットの名前を変更しようとしています。ファイルには次の形式があります。
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