web-dev-qa-db-ja.com

terminalとregexpを使用して名前を変更し、ファイル名から先行番号を削除

次のファイルの名前を変更して、シーケンス番号を削除したいと思います。

01 X.mp3からX.mp3

02 Add Me In.mp3からAdd Me In.mp3

以下のrenameコマンドを試してみました。

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/ }
2
Snehashish

そのエラーが発生する理由がわかりません。実際、エラーにはあなたが示しているよりも多くの行があったと私は合理的に確信しています。一つには、実際のエラーメッセージはありません。

ただし、その正規表現は実際にはどちらのサンプルファイルとも一致しません。小文字のみに一致する[a-z]+\.mp3を使用しており、拡張子まで完全に一致しているため、名前がのみ以下の小文字で構成されるファイルにのみ一致します。削除する数字とスペース。代わりに、[a-zA-Z]を照合するか、s///iを使用して大文字と小文字を区別しないようにすることもできますが、Wordの残りの部分とはまったく照合しないことをお勧めします。最初から数字と空白を削除したいだけなので、それらを一致させてください。

rename -vn 's/^\d+\s+//' *mp3
7
terdon

パラメータ拡張 を使用したソリューション

for i in *.mp3 ; do mv "$i" "${i#"${i%%[!0-9 ]*}"}" ; done
  • ${i%%[!0-9 ]*}は、最初の非数字/非スペース文字から最後まで削除します。
  • 残りの文字は${i#に渡され、i変数の先頭から削除され、数字とスペースを開始せずに目的のファイル名になります。
5
Sundeep

-nを削除すると、機能します。 -nは、「結果を変更するのではなく、結果を出力するだけ」を意味します。

0
Alex