Perl名前変更ツール(Debian)で算術演算を実行しようとしています。

Perl名前変更ツール(Debian)で算術演算を実行しようとしています。

5つのmp3ファイルがあるとしましょう。

01-trackfoo.mp3
02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
05-trackxyz.mp3

次に、ファイルをすばやく聞いて(コンソールのmplayerだけが必要です)、トラックがどこにあるかを確認します。無効な順序。 05は実際には02で、残りは名前を変更する必要があります。まず一時的な名前を変更します。

01-trackfoo.mp3

02-trackbar.mp3
03-trackbaz.mp3
04-trackabc.mp3
00-trackxyz.mp3

今、「変換」が必要です。 02は03になり、03は04になり、04は05になります。混乱を最小限に抑えるため、ex-05(現在00)は今後修正いたしますmv

私の方法は次のとおりです。 (perl rename、著者Larry Wall、Debianではデフォルト)

rename 's/0([2-4])([\s\S]+)/0($1+1)$2/' *

そして(後でより多くのRTFMを経た後)

rename 's/0([2-4])([\s\S]+)/0($1+1)$2/e' *

そのどれも機能しません。特に、/e[val]修飾子は他のものを許可しないので、さらにそうです。しかし、評価して評価を文字列と結合しようとすると、すぐにエラーが発生します。うまくいくかもしれませんbash、例えばと foo$((1+6))評価されますfoo7

それではどうすればよいですか(単一行が優先され、完全なスタンドアロンスクリプトを作成する予定はありません)。

ベストアンサー1

あなたはほとんどそれを持っています。/e引用符とドット演算子を使用して変更された代替項目にリテラル文字列と文字列の関連付けを明示的に表示するだけです。

rename 's/0([2-4])([\s\S]+)/"0".($1+1).$2/e' *

おすすめ記事