MV-Dateien mit 2-stelliger Nummer

MV-Dateien mit 2-stelliger Nummer

Ich möchte Dateien von folgenden Anbietern massenweise umbenennen:

„02 Disc 01 Mein Lied.mp3“

Zu

„Disc 01 Mein Lied 02.mp3“

Wie kann ich das in Bash machen? Bitte beachten Sie, dass alle Zahlen zweistellig formatiert sind (1-9 wird mit einer Null vorangestellt)

Dateiliste:

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

Antwort1

Wenn ich mich recht entsinne, könnten Sie die Perl-Implementierung des renameProgramms verwenden (es gibt ein anderes Programm namens , renamedas Teil des util-linux Pakets ist). Beispiel: Lassen Sie uns zunächst eine Liste der Dateien neu erstellen, die Sie in Ihrer Frage angegeben haben:

$ 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

Ausführen renameund Dateien erneut auflisten::

$ 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

Antwort2

Sie können Folgendes versuchen:

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

Was dazu führt:

'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'

Antwort3

Eine Bash-Lösung. Verwenden des -aFlags aus der integrierten readBefehlssubstitution und einer Here-Zeichenfolge.

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

Entfernen Sie es echo, wenn Sie mit dem Ergebnis zufrieden sind.

verwandte Informationen