Bash:区切り文字から1を引いた部分文字列に分割される

Bash:区切り文字から1を引いた部分文字列に分割される

ファイル名をまとめて変更したいです A-B-C#2-D.wavA-B-C#1-D.wavたとえば、次のようになります。

A-B-C#2-D.wav
A-B-C#8-G.wav
A-B-C6-E.wav

~になる

A-B-C#1-D.wav
A-B-C#7-G.wav
A-B-C5-E.wav

したがって、3番目の部分文字列の数字はマイナス1でなければなりません。 (#コメントではないファイル名の一部;#ファイル名があるかどうかは可能です。)

ベストアンサー1

そしてzsh

autoload zmv # best in ~/.zshrc
zmv -n '(*[^0-9])(<1->)(*.wav)(#qn)' '$1$(($2-1))$3'

(満足すれば削除-n

名前を変更する(#qn)ために、リストを番号順にソートするために使用されます。A-B-C#9-D.wav今後 A-B-C#10-D.wav例えば。

ただし、aA-B-C#9-D.wavと両方がA-B-C#10-D.wav存在する場合zmv、ファイル名は既存のファイル名に変更されたとマークされ、コマンドは中断されます。-fこれを引き続き適用するには、オプションを追加する必要があります。

または、zsh(数値グローバル順序の場合)とperl名前変更を使用します。

rename -n 's/\d+/$&-1/e' ./*[1-9]*.wav(#qn)

-f(一部のバリエーションと同じ警告とオプションrename

おすすめ記事