シリアル番号を削除して次のファイルの名前を変更したいと思います。
01 X.mp3
到着X.mp3
02 Add Me In.mp3
到着Add Me In.mp3
以下の名前変更コマンドを使用しようとしています。
rename -v -n 's/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/' *.mp3
このコマンドを実行すると、次のエラーが発生します。
Using expression: sub { use feature ':5.18'; s/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/ }
答え1
なぜこのようなエラーが発生するのかわかりません。実際には、示されたものよりも多くのエラー行があると確信しています。まず、実際のエラーメッセージはありません。
ただし、対応する正規表現は実際にはサンプルファイルと一致しません。使用しているものは[a-z]+\.mp3
小文字のみと一致し、拡張子は常に一致するため、名前に次のファイルが含まれます。ただ削除する数字とスペースの後に続く小文字です。 match[a-zA-Z]
または use を使用するs///i
と、一致で大文字と小文字を区別することはできませんが、残りの単語はまったく一致しないことをお勧めします。最初から数字とスペースだけを削除したいので、一致させてください。
rename -vn 's/^\d+\s+//' *mp3
答え2
ソリューションの活用パラメータ拡張
for i in *.mp3 ; do mv "$i" "${i#"${i%%[!0-9 ]*}"}" ; done
${i%%[!0-9 ]*}
数字/スペースではなく、最初の文字から最後まで削除します。- 残りの文字は変数に渡され、
${i#
変数i
の先頭から削除され、開始数字とスペースなしで目的のファイル名が生成されます。
答え3
削除すると-n
動作します。-n
「結果を変更する代わりに結果のみを印刷する」という意味です。