端末と正規表現を使用してファイル名の先行番号を削除して名前を変更する

端末と正規表現を使用してファイル名の先行番号を削除して名前を変更する

シリアル番号を削除して次のファイルの名前を変更したいと思います。

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「結果を変更する代わりに結果のみを印刷する」という意味です。

関連情報