Tracknummern aus Musiktiteln entfernen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rhHeini
Beiträge: 2291
Registriert: 20.04.2006 20:44:10

Tracknummern aus Musiktiteln entfernen

Beitrag von rhHeini » 07.11.2021 19:08:25

Beiss mir gerade die Zähne an regex aus. Stehe damit irgendwie auf Kriegsfuß, mir fehlt da Routine und ein tieferes Verständnis.

Folgende Aufgabe: ich hab hier einen Haufen Musikdateien auf meinem Fileserver bei denen ich die Tracknummern im Dateinamen entfernen will. Nichts alles auf einmal, schön Verzeichnis für Verzeichnis, wobei auch z.T. Logs und Cuesheeets in den Ordnern liegen. Damit ich das nicht vergesse wird das in ein Skript reingetippt.

Von der GUI aus sieht die Struktur im Prinzip so aus:

Code: Alles auswählen

/Audio/CDs/100% Rock (CD1+)/01 - Canned Heat - On The Road Again.wav
Schau ich mir das aber auf der Konsole an, sehe ich:

Code: Alles auswählen

/Audio/CDs/'100% Rock (CD1+)'/'01 - Canned Heat - On The Road Again.wav'
Aus einem Haufen Fäden hab ich mir folgendes als Grundlage zusammengesucht und versuche das an meine Anforderung anzupassen:

Code: Alles auswählen

find . -type f -name '*(*)*' -exec rename -n 's/\(/-/g;s/\)/-/g' {} +
Ich hab jetzt erst mal angefangen find zu versuchen zu verstehen. Dies funktioniert und listet die WAV-Dateien im aktuellen Verzeichnis auf:

Code: Alles auswählen

find . -type f -name '*.wav' -print
Dies geht nicht sprich bringt keinen Output:

Code: Alles auswählen

find . -type f -name '^[0-9]{2} - *' -print
Wo ist da mein Denkfehler?

Rolf

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von Meillo » 07.11.2021 19:37:47

rhHeini hat geschrieben: ↑ zum Beitrag ↑
07.11.2021 19:08:25
Von der GUI aus sieht die Struktur im Prinzip so aus:

Code: Alles auswählen

/Audio/CDs/100% Rock (CD1+)/01 - Canned Heat - On The Road Again.wav
Schau ich mir das aber auf der Konsole an, sehe ich:

Code: Alles auswählen

/Audio/CDs/'100% Rock (CD1+)'/'01 - Canned Heat - On The Road Again.wav'
Poste bei so Anfragen immer neben einem Beispiel wie es aussieht auch wie diese Zeile umgebaut werden soll.

Ich rate mal, dass es danach so aussehen soll:

Code: Alles auswählen

/Audio/CDs/100% Rock (CD1+)/Canned Heat - On The Road Again.wav
Korrekt?
Aus einem Haufen Fäden hab ich mir folgendes als Grundlage zusammengesucht und versuche das an meine Anforderung anzupassen:

Code: Alles auswählen

find . -type f -name '*(*)*' -exec rename -n 's/\(/-/g;s/\)/-/g' {} +
Ich hab jetzt erst mal angefangen find zu versuchen zu verstehen. Dies funktioniert und listet die WAV-Dateien im aktuellen Verzeichnis auf:

Code: Alles auswählen

find . -type f -name '*.wav' -print
Dein Weg ist schon gut. Du musst den find-Aufruf an deine Beduerfnisse anpassen und und dann den rename-Aufruf an deine Beduerfnisse anpassen.
Dies geht nicht sprich bringt keinen Output:

Code: Alles auswählen

find . -type f -name '^[0-9]{2} - *' -print
Wo ist da mein Denkfehler?
Dein Denkfehler ist, dass find nur Globbing kann, aber keine Regexps. Hier kann man es erfeulicherweise 1:1 uebersetzen:

Code: Alles auswählen

find . -type f -name '[0-9][0-9] - *' -print
Das sollte die gesuchten Dateien liefern.


Dann noch mit rename (das dagegen Regexps verwendet, genau gesagt PCREs), die passende Ersetzung machen:

Code: Alles auswählen

rename -n 's/^[0-9][0-9] - //'
Use ed once in a while!

rhHeini
Beiträge: 2291
Registriert: 20.04.2006 20:44:10

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von rhHeini » 07.11.2021 20:20:10

Meillo hat geschrieben: ↑ zum Beitrag ↑
07.11.2021 19:37:47
Poste bei so Anfragen immer neben einem Beispiel wie es aussieht auch wie diese Zeile umgebaut werden soll.

Ich rate mal, dass es danach so aussehen soll:

Code: Alles auswählen

/Audio/CDs/100% Rock (CD1+)/Canned Heat - On The Road Again.wav
Korrekt?
Sorry, hab das in der Eile vergessen. Ja, genauso soll es aussehen.
Meillo hat geschrieben: ↑ zum Beitrag ↑
07.11.2021 19:37:47
Dein Denkfehler ist, dass find nur Globbing kann, aber keine Regexps. Hier kann man es erfeulicherweise 1:1 uebersetzen:

Code: Alles auswählen

find . -type f -name '[0-9][0-9] - *' -print
Das sollte die gesuchten Dateien liefern.
Uups, reingefallen .... Das tuts schon mal für die Suche.
Meillo hat geschrieben: ↑ zum Beitrag ↑
07.11.2021 19:37:47
Dann noch mit rename (das dagegen Regexps verwendet, genau gesagt PCREs), die passende Ersetzung machen:

Code: Alles auswählen

rename -n 's/^[0-9][0-9] - //'
Jetzt fehlt mir erst mal rename auf dem Rechner. Ist weder in /bin, /sbin noch in /usr/bin bzw. /usr/sbin zu finden? Laut manpage sollte das Teil der Util-linux sein. Und die sind installiert. Wenn ich in Synaptic durch die installierte Dateien scrolle, fehlt da aber rename. Ist da was in ein anderes Paket verschoben worden?

Danke, Rolf

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von smutbert » 07.11.2021 21:51:00

rename kann von unterschiedlichen Paketen kommen – welches rename verwendet wird, wird vom alternatives-System bestimmt. Auf meinem System kommt es zum Beispiel von Debianrename (die eigentliche ausführbare Datei heißt file-rename).

rhHeini
Beiträge: 2291
Registriert: 20.04.2006 20:44:10

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von rhHeini » 07.11.2021 22:18:51

Danke, das gleiche Debianrename hab ich inzwischen auch gefunden und installiert, und nebenbei festgestellt das das ein Perl-Skript ist.

Die Zeile

Code: Alles auswählen

find . -type f -name '[0-9][0-9] - *' -exec file-rename -v 's/^[0-9][0-9]\s-\s//' {} +
tut aber nichts und bringt auch keinen Meldungen irgendeiner Art.

Probiere ich dann einzeln

Code: Alles auswählen

file-rename -v 's/^[0-9][0-9]\s-\s//' '01 - Canned Heat - On The Road Again.wav'
funktioniert die Umbenennung. Also klappt die Übergabe von find nach file-rename nicht. Das warum ist mir aber unklar.

Rolf

willy4711

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von willy4711 » 07.11.2021 23:01:37

Sorry, hab zwar nichts zu deiner Frage beizutragen (also OT), aber mir kräuseln sich bei solchen
Sachen immer die Nackenhaare, da ich halt total anders an meine Musikdatenbank ran gehe :evil:
Allein von Canned Heat sieht das bei mir so aus:

Code: Alles auswählen

/media/Musik/(Multiple_Artists)/Road_Trip_Blues/Canned_Heat_-_Road_Trip_Blues_-_15_-_On_The_Road_Again.flac
/media/Musik/Canned_Heat/The_Canned_Heat_Cookbook/Canned_Heat_-_The_Canned_Heat_Cookbook_-_07_-_On_The_Road_Again.flac
/media/Musik/Canned_Heat/Let's_Work_Together_The_Best_Of_Canned_Heat/Canned_Heat_-_Let's_Work_Together_The_Best_Of_Canned_Heat_-_01_-_On_The_Road_Again.ape
/media/Musik/Canned_Heat/Uncanned!_The_Best_Of_Canned_Heat_[Disc_1]/Canned_Heat_-_Uncanned!_The_Best_Of_Canned_Heat_[Disc_1]_-_01_-_On_the_Road_Again_(Alternate_Take).flac
/media/Musik/Canned_Heat/Uncanned!_The_Best_Of_Canned_Heat_[Disc_1]/Canned_Heat_-_Uncanned!_The_Best_Of_Canned_Heat_[Disc_1]_-_18_-_On_the_Road_Again.flac
/media/Musik/Canned_Heat/Canned_Heat_1967-76__The_Boogie_House_Tapes_[Disc_1]/Canned_Heat_-_Canned_Heat_1967-76__The_Boogie_House_Tapes_[Disc_1]_-_11_-_On_the_Road_Again.ape
/media/Musik/Canned_Heat/Boogie_with_Canned_Heat_[Remastered]/Canned_Heat_-_Boogie_with_Canned_Heat_[Remastered]_-_03_-_On_the_Road_Again.flac
/media/Musik/Canned_Heat/Boogie_with_Canned_Heat_[Remastered]/Canned_Heat_-_Boogie_with_Canned_Heat_[Remastered]_-_11_-_On_The_Road_Again_(Single_Version).flac
Die Dauer der Tracks differiert zwischen 5:05 und 2:08, auch in der Qualität ist unterschiedlich,
was sicherlich einen Unterschied macht :?:

Für mich ist es wichtig, einen Song möglichst genau zu lokalisieren ( Label / Album / Jahr)
da dies häufig auch die musikalische Entwicklung einer Band wiederspiegelt. Das Label spielt meist
auch eine entschiedene Rolle bei der Qualität der Musikkonserve.

Aber das scheint ja für viele nicht wichtig zu sein.

Also: Weitermachen und ignorieren :wink:

Listening to: 'Refried Boogie [live]Part 1 & 2' from 'Livin' The Blues [Disc 2]' by 'Canned Heat' with JRiver Media Center 28

Am Rande:
Nach hier: https://www.amazon.com/100-Rock-Various ... B0000AZKH0
wäre das eh Track 11 gewesen und nicht Track 1 --- aber -- egal

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von tobo » 08.11.2021 02:21:57

rhHeini hat geschrieben: ↑ zum Beitrag ↑
07.11.2021 22:18:51
Die Zeile

Code: Alles auswählen

find . -type f -name '[0-9][0-9] - *' -exec file-rename -v 's/^[0-9][0-9]\s-\s//' {} +
tut aber nichts und bringt auch keinen Meldungen irgendeiner Art.

Probiere ich dann einzeln

Code: Alles auswählen

file-rename -v 's/^[0-9][0-9]\s-\s//' '01 - Canned Heat - On The Road Again.wav'
funktioniert die Umbenennung. Also klappt die Übergabe von find nach file-rename nicht. Das warum ist mir aber unklar.
Die Übergabe wird wohl schon funktionieren, aber find gibt das Ergebnis mit Bezug zum eingestellten Pfad zurück, was bei dir durch den "." das aktuelle Verzeichnis ist (sieht man zwar immer so, könnte man aber auch einfach weglassen). Jedenfalls wäre damit ein Ergebnis z.B. "./01 - Canned Heat - On The Road Again.wav" und damit greift dein rename mit eingestelltem Zeilenanfang "^[0-9]..." nicht mehr. Ergo - den Zeilenanfang aus dem rename entfernen und dann wird's wohl funktionieren.
Übrigens kann dein GNU-find auch regex, durch -regex anstelle -name und mit -regextype auch im Typ einstellbar.

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von paedubucher » 12.11.2021 10:03:10

Hier noch schnell mein Senf zur Sache: Das Taggen von Audiodateien ist eine der wenigen Aufgaben, für welche ich mit einem GUI besser zurecht komme als mit Kommandozeilentools. Ich kann hier Debianexfalso sehr empfehlen. In der Kombination mit Debianquodlibet kann man sich dann die Audios gleich anhören, was gerade beim Aufräumen sehr unordentlicher Sammlungen nützlich sein kann. Bei einzelnen Alben, welche die Tags schon einmal einigermassen ordentlich mitbringen, sind aber Kommandozeilentools wie z.B. Debianffmpeg schon auch sinnvoll.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von Meillo » 12.11.2021 10:13:19

paedubucher hat geschrieben: ↑ zum Beitrag ↑
12.11.2021 10:03:10
Das Taggen von Audiodateien
Meinst du das Taggen um sie anschliessend anhand der Tags automatisch umbennen zu lassen? In dem Thread geht's ja nur um das Umbennenen im Dateisystem.

Falls man alle Dateien anhand von Tags automatisch benennen hat lassen, laesst sich das ggf. schnell aendern, wenn man nur das Benennungsformat in der Config aendert und alle neu umbenennen laesst.

Bislang hat rhHeini jedoch nichts von Tags geschrieben.



Btw: tobo hat natuerlich recht, dass der Zeilenanfangsanker da nicht funktioniert. Ggf. waere es gut, an seiner Stelle dann auf einen Slash zu pruefen, damit man auch wirklich nur Zahlen am Dateinamensanfang ersetzt.
Use ed once in a while!

Benutzeravatar
paedubucher
Beiträge: 856
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von paedubucher » 12.11.2021 11:59:25

Meillo hat geschrieben: ↑ zum Beitrag ↑
12.11.2021 10:13:19
paedubucher hat geschrieben: ↑ zum Beitrag ↑
12.11.2021 10:03:10
Das Taggen von Audiodateien
Meinst du das Taggen um sie anschliessend anhand der Tags automatisch umbennen zu lassen? In dem Thread geht's ja nur um das Umbennenen im Dateisystem.
Ja genau, mit quodlibet/exfalso kann man die Dateien dann automatisch anhand der Tags benennen lassen, sodass Tags und Dateiname konsistent sind. (Geht übrigens auch in die andere Richtung.) Hätte ich klarer schreiben sollen. Ist natürlich ein Umweg, schafft aber durchaus einen Nutzen.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von tobo » 12.11.2021 11:59:46

Ich glaube, da muss man insgesamt ein bisschen mehr aufpassen: Wenn mit Slash-Prüfung, dann muss per -regex geprüft werden, da -name nur Dateinamen prüft und in Dateinamen sind keine Slashs erlaubt. Zudem muss man beim rename auch theoretisch Pfade beachten, die mit dem Suchmuster beginnen und durch die Bearbeitung in einer Shell müssen zusätzlich auch z.B. Leerzeichen im Pfad beachtet werden, weswegen -execdir richtiger als -exec ist:

Code: Alles auswählen

find . -type f -regex '.*/[0-9][0-9] - [^/]+' -execdir sh -c 'basename "$0" | rename "s/^[0-9][0-9] - //"' {} \;
PS: Ich bemerke gerade, dass ich ich Meillos Slash-Aussage fälschlicherweise dem find (anstatt rename) zugeordnet habe. Mit dem -regex wäre es dann jetzt "doppelt sicher", der hintere Teil umgeht aber weiterhin die Pfadproblematik.

Edit: RegEx angepasst und execdir-Aussage berichtigt.
Zuletzt geändert von tobo am 12.11.2021 14:48:20, insgesamt 3-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von Meillo » 12.11.2021 12:23:25

tobo hat geschrieben: ↑ zum Beitrag ↑
12.11.2021 11:59:46
PS: Ich bemerke gerade, dass ich ich Meillos Slash-Aussage fälschlicherweise dem find (anstatt rename) zugeordnet habe.
Ja, genau. Ich haette es auch gleich klarer formulieren koennen ...


Schoen an dem find-rename-Konstrukt ist, dass alle Dateien, die find liefert, nur dann umbenannt werden, wenn die Regexp im rename auch passt. Es steht uns also frei, beim find genauer zu filtern oder beim rename genauer zu filtern oder an beiden Stellen. Ganz wie man will.
Use ed once in a while!

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von tobo » 12.11.2021 12:45:01

Meillo hat geschrieben: ↑ zum Beitrag ↑
12.11.2021 12:23:25
Schoen an dem find-rename-Konstrukt ist, dass alle Dateien, die find liefert, nur dann umbenannt werden, wenn die Regexp im rename auch passt.
Wobei man natürlich aufpassen muss, weil hier zwei verschiedene Ebenen betrachtet werden. Find liefert Pfad+Dateiname und rename verarbeitet plump einen String ("./01 - file" vs. "./01 - dir/01 - file"). Aber ok, schlimmstenfalls entstehen dadurch Fehlermeldungen im rename.

Edit: Hier noch eine Lösung ohne separate Shell und deshalb mit Umgehung der bereits genannten Fallstricke:

Code: Alles auswählen

find . -type f -regex '.*/[0-9][0-9] - [^/]+' -exec rename 's#(.*/)\d\d - ([^/]+)#$1$2#' {} \;
## oder auch einfacher:
find . -type f -name '[0-9][0-9] - *' -exec rename 's#(.*/)\d\d - (.+)#$1$2#' {} \;
Zuletzt geändert von tobo am 12.11.2021 19:00:43, insgesamt 5-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Tracknummern aus Musiktiteln entfernen

Beitrag von Meillo » 12.11.2021 12:48:29

Stimmt. Das sollte man im Blick behalten. :THX:
Use ed once in a while!

Antworten