2桁の数字形式のMvファイル

2桁の数字形式のMvファイル

次のファイルの名前を一括変更したいと思います。

"02 CD 01 私の歌.mp3"

到着

「CD 01 僕の曲02.mp3」

Bashでどうすればいいですか?すべての数字は2桁の形式です(1〜9の前に0がオーム)。

ファイルリスト:

01 Disc 01 My Song.mp3
02 Disc 01 My Song.mp3
03 Disc 01 My Song.mp3
04 Disc 01 My Song.mp3
05 Disc 01 My Song.mp3
06 Disc 01 My Song.mp3
07 Disc 01 My Song.mp3
08 Disc 01 My Song.mp3
09 Disc 01 My Song.mp3

答え1

IIUCでは、プログラムのPerl実装を使用できます(パッケージの一部であるrename他のプログラムがあります)。はい - まず、質問に提供したファイルのリストを再作成しましょう。renameutil-linux

$ touch 0{1..9}\ Disc\ 01\ My\ Song.mp3
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:41 01 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 02 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 03 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 04 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 05 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 06 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 07 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 08 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 09 Disc 01 My Song.mp3

再実行しrenameてファイルを一覧表示::

$ rename 's,([0-9]+) Disc 01 My Song.mp3,Disc 01 My song $1.mp3,' *
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 01.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 02.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 03.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 04.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 05.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 06.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 07.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 08.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 09.mp3

答え2

次のことを試すことができます。

for f in *.mp3; do 
  foo=$(echo "${f%.*} ${f%%[^0-9]*}.mp3")
  mv "$f" "${foo#[0-9]* }"
done

結果:

'Disc 01 My Song 01.mp3'
'Disc 01 My Song 02.mp3'
'Disc 01 My Song 03.mp3'
'Disc 01 My Song 04.mp3'
'Disc 01 My Song 05.mp3'
'Disc 01 My Song 06.mp3'
'Disc 01 My Song 07.mp3'
'Disc 01 My Song 08.mp3'
'Disc 01 My Song 09.mp3'

答え3

バッシュソリューション。これには、-a組み込みフラグreadとコマンド置換と文字列を使用してください。

for f in *.mp3; do
  renamed=$(
    read -ra var <<< "$f"
    printf '%s' "${var[1]} ${var[2]} ${var[3]} ${var[4]%.*} ${var[0]/%/.${var[4]##*.}}"
  )
  echo mv -v -- "$f" "$renamed"
done

echo結果が満足であれば削除してください。

関連情報