[gelöst] Unterverzeichnisse mit flac-Dateien finden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
smutbert
Beiträge: 8392
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

[gelöst] Unterverzeichnisse mit flac-Dateien finden

Beitrag von smutbert » 27.03.2025 01:30:34

und

(Musik)alben auf Vollständigkeit prüfen

Nach einem PEBKAC-Vorfall würde ich gerne prüfen ob mir in meiner Musiksammlung Titel verloren gegangen sind. Es handelt sich um sorgsam getaggte flac-Dateien, die ungefähr so vorliegen

»<albumartist>/<year> <album>/<discnumber> <tracknumber>.flac«

Im großen und ganzen fühle ich mich der Herausforderung beinahe gewachsen, aber mit Hilfe geht es vielleicht leichter und macht mehr Spaß.

Anfangen wollte ich mit einem Befehl, der mir alle Unterverzeichnisse liefert, in denen flac-Dateien liegen, damit ich die der Reihe nach abarbeiten kann. Meine Idee dazu

Code: Alles auswählen

find -name '*.flac' -exec dirname {} \; | sort -u
nur würde ich ungern alle weiteren Befehle in den find-Aufruf packen müssen, was mit dem sort hintendran eh nicht geht und außerdem muss noch
  • die (Soll-)Anzahl der CDs ermittelt werden
  • für jede CD die (Soll-)Anzahl der Titel
  • schließlich die tatsächliche Anzahl mit der Soll-Anzahl verglichen oder auf andere Weise geprüft werden ob alle Titel da sind
  • ein paar Fleißaufgaben habe ich auch noch im Hinterkopf, die sind aber glaube ich vergleichsweise einfach zu lösen
ich könnte natürlich die Verzeichnisliste in eine Datei schreiben und die dann zeilenweise abarbeiten?
Zuletzt geändert von smutbert am 15.04.2025 22:59:54, insgesamt 1-mal geändert.

Benutzeravatar
thunder11
Beiträge: 2546
Registriert: 19.04.2023 09:08:30

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von thunder11 » 27.03.2025 02:15:52

smutbert hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 01:30:34
Es handelt sich um sorgsam getaggte flac-Dateien, die ungefähr so vorliegen

Code: Alles auswählen

»<albumartist>/<year> <album>/<discnumber> <tracknumber>.flac«
Ne Lösung habe ich nicht. Bei meinen über 6000 Alben würde ich mich eher erschießen bei so einer Aufgabe.
Mich interessiert bei deiner Nomenklatur aber die <discnumber>
ist das die original Catalog- Nr also z.b. ,CSCD 103 (disc 1),
das wäre dann z.B. die Nummer für diese CD (von discogs.com)

Code: Alles auswählen

/media/Musik/Jimi_Hendrix/Anthology_[Disc_1]/Jimi_Hendrix_-_Anthology_[Disc_1]_-_01_-_Foxy_Lady.flac
Wenn das die (Vermutete) Catalog- Nummer ist, müsste man also nach dieser Nr. suchen, die Anzahl der Songs/Namen/Song-nummern/ Song-Länge vergleichen, und eine eventuelle Differenz ausgeben.

Ansonsten sehe ich die Aufgabe als unlösbar an.

Mal ein Beispiel von Jimi Hendrix :
https://www.discogs.com/de/artist/11059 ... ter=Albums

Allein die Erste CD/LP "The Jimi Hendrix Experience – Are You Experienced" hat 26 Versionen
Da wird man schlichtweg irre. :twisted:

Dafür bräuchte man mindest eine Datenbank, die sich nach den Catalog- Nummern durchsuchen ließe.
Ich kenne sowas nicht.
Bin gespannt, wie du das löst :P

Zenturio19
Beiträge: 362
Registriert: 02.06.2011 11:45:33

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von Zenturio19 » 27.03.2025 07:31:53

Eine Sicherung besteht nicht, sodass man die Dateienanzahl vergleichen kann?

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von Meillo » 27.03.2025 08:17:10

Woher bekommst du die Sollanzahlen?
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 14055
Registriert: 09.04.2008 12:48:59

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von hikaru » 27.03.2025 09:08:42

Meillo hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 08:17:10
Woher bekommst du die Sollanzahlen?
Ich nehme an, das ist eine der zu lösenden Teilaufgaben. ;)
Ich bin ab und zu über den Begriff "Musicbrainz" gestolpert, ohne mir jedoch bisher Gedanken darüber gemacht zu haben, was es damit auf sich hat. Das ist wohl eine Open-Source-Audio-Metadaten-DB mit Web-API [1] und sollte sich daher prinzipiell für die Aufgabe eignen.

thunder11 hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 02:15:52
Allein die Erste CD/LP "The Jimi Hendrix Experience – Are You Experienced" hat 26 Versionen
Musicbrainz findet 46 Katalognummern für dein Jimi-Hendrix-Beispiel. [2] Keine davon lautet "CSCD 103". Sieht nach viel Spaß aus. ;)


[1] https://musicbrainz.org/doc/MusicBrainz_API
[2] https://musicbrainz.org/release-group/d ... 2ddbff4a96

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von Meillo » 27.03.2025 09:19:06

smutbert hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 01:30:34
Nach einem PEBKAC-Vorfall würde ich gerne prüfen ob mir in meiner Musiksammlung Titel verloren gegangen sind.
Vielleicht kann man auch nochmal analysieren, was bei dem PEBKAC-Vorfall passiert sein koennte und was nicht. Es werden vermutlich nicht komplett zufaellig Dateien verschwunden sein, sondern wenn dann eher nach irgendeinem Muster. Vielleicht bringt es einen weiter wenn man etwas ueber dieses vermutliche Muster rausfindet.



Was natuerlich unabhaengig von Solldaten geprueft werden kann, ist die Konsistenz der vorhandenen Daten an sich. Da es Tracknummern in den Dateinamen gibt, kann man die auf Luecken und auf Start bei 1 pruefen. Dann koennte man nur fehlende letzte Dateien nicht erkennen, und fehlende komplette Alben.
Use ed once in a while!

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von tobo » 27.03.2025 09:28:06

smutbert hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 01:30:34
ich könnte natürlich die Verzeichnisliste in eine Datei schreiben und die dann zeilenweise abarbeiten?
Wenn du auf der Ergebnisliste mit find weiter suchen willst, dann ginge auch:

Code: Alles auswählen

find -name '*.flac' -exec dirname {} + | sort -u | xargs -I {} find {} -type f ...
## bzw:
find -name '*.flac' -exec dirname {} + | sort -u | while IFS= read -r dir; do find "$dir" -type f ...; done

Benutzeravatar
thunder11
Beiträge: 2546
Registriert: 19.04.2023 09:08:30

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von thunder11 » 27.03.2025 09:47:42

hikaru hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 09:08:42
Musicbrainz findet 46 Katalognummern für dein Jimi-Hendrix-Beispiel. [2] Keine davon lautet "CSCD 103". Sieht nach viel Spaß aus. ;)
"CSCD 103 (disc 1)" in eine (fast beliebige) Suchmaschine eingegeben findet an erster Stelle:
https://www.discogs.com/de/release/1035 ... hFuRhqMIn0
hikaru hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 09:08:42
Musicbrainz findet 46 Katalognummern für dein Jimi-Hendrix-Beispiel. [2] Keine davon lautet "CSCD 103". Sieht nach viel Spaß aus. ;)
Da ist ja das Irre je nachdem, wie man sucht, hätte ich da noch 379 Versionen zu bieten :roll: 8O
https://www.discogs.com/artist/255672-T ... Experience

Meine Datenbank ist das Ergebnis von gut 20 Jahren "Arbeit"
Die Quellen für das Taggen sind
https://www.discogs.com/
und
https://www.allmusic.com/
wenn dort nichts mehr geht ---> Google
Das wird bei mir alles "per Hand" gemacht, da automatische Tagger wie EasyTag und Konsorten einfach zu oft Mist bauen. D.h.:
Künstler /Album suchen ----> Die richtige CD orten ---> Track-Anzahl /Reihenfolge /Tacklänge müssen stimmen. Dann wird das getaggt mit Label/Jahr /Genre.
Zum Abschluss wird das dann mit obiger Nomenklatur nach /media/Musik verschoben.

Viel Viel Arbeit :mrgreen:

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von smutbert » 27.03.2025 11:05:46

thunder11 hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 02:15:52
[...]
Mich interessiert bei deiner Nomenklatur aber die <discnumber>
ist das die original Catalog- Nr also z.b. ,CSCD 103 (disc 1) [...]
Das ist keine eindeutige Identifikationsnummer sondern schlicht die Nummer der CD/des Mediums, wenn man die CDs/Medien eines Albums durchnummeriert. ☺
Bei der Mehrzahl der Alben, die nur auf einer CD bestehen, ist <discnumber> also immer 1. discnumber ist der Namen des Tags, der dafür verwendet wird (zumindest zeigt ihn Quodlibet so an).



Dann ist die Frage nach der Soll-Anzahl aufgekommen und nachdem ich es mir eigentlich möglichst einfach machen will, nöchte ich einfach nur die Tags auslesen, also einfach für (mindestens) einen Titel jedes Albums

Code: Alles auswählen

$ metaflac --show-tag=disctotal "01 01.flac"
disctotal=2
nachsehen wieviele CDs es sein sollten und dann für jede CD die Zahl der Titel auslesen

Code: Alles auswählen

$ metaflac --show-tag=tracktotal "01 01.flac"
tracktotal=12
$ metaflac --show-tag=tracktotal "02 01.flac"
tracktotal=10
Auf die Dateinamen kann ich mich verlassen, soweit mir nicht noch etwas passiert ist, was ich (noch) nicht bemerkt habe.
Zenturio19 hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 07:31:53
Eine Sicherung besteht nicht, sodass man die Dateienanzahl vergleichen kann?
Doch, es gibt eine lokale Kopie, einen read-only-btrfs-Snapshot von vorher und ein off-site-Backup, aber mir ist das beim Einpflegen einiger neuer Alben passiert, das müsste ich also wiederholen.
Meillo hat geschrieben: ↑ zum Beitrag ↑
27.03.2025 09:19:06
Vielleicht kann man auch nochmal analysieren, was bei dem PEBKAC-Vorfall passiert sein koennte und was nicht. Es werden vermutlich nicht komplett zufaellig Dateien verschwunden sein, sondern wenn dann eher nach irgendeinem Muster. Vielleicht bringt es einen weiter wenn man etwas ueber dieses vermutliche Muster rausfindet.
Eigentlich bin ich zu 99% sicher, dass nichts fehlt. Mir ist das ganze beim Umbenennen (nach meinem Schema im Eröffnungspost) passiert. Das habe ich wie immer in Quodlibet/exfalso gemacht, nur waren einige Tags noch leer bzw. falsch. Deswegen ist es zu Namenskollisionen gekommen.
In der Situation fragt Quodlibet zwar nach bzw. bricht ab, aber die Nachfrage ist mir zu einem unglücklichen Zeitpunkt unter den Mauszeiger gekommen. Die Meldung habe ich nur Sekundenbruchteile zu sehen bekommen und ich kann weder sagen wie die Schaltfläche heißt auf die ich geklickt habe noch um welche Dateien genau es gegangen ist.
(Danach habe ich mich etwas dämlich verhalten, indem ich nur die Tags korrigiert/ergänzt und die Umbenennung neu gestartet habe, ohne zuerst nachzusehen wo mir bei den neuen Alben der Fehler unterlaufen ist.)


Ein bisschen sehe ich das auch als sportliche Herausforderung mein flac-Test-Skript (viewtopic.php?t=159532) um einige Funktionen zu erweitern.

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von smutbert » 27.03.2025 23:57:48

für ein Verzeichnis/Album scheint folgendes schon einmal im großen und ganzen zu funktionieren (die Fehlerausgabe, wenn alle Titel einer CD fehlen ist etwas irreführend, weil nur da Fehlen des ersten Titel bemängelt wird)

Code: Alles auswählen

#!/bin/bash

directory="${HOME}/Test/David Bowie/1989 Sound + Vision"

disctotal="$(metaflac --show-tag=disctotal "${directory}/"*.flac \
  | awk -F '=' '{print $NF}' | sort -u)"
  
#Prüfen ob Zahl der CDs in allen Dateien übereinstimmt
test $(echo "${disctotal}" | wc -l | awk '{print $1}') -gt 1 \
  && { echo "Fehler Anzahl der CDs, ${directory}"; exit; }

for i in $(seq 1 ${disctotal}); do
    discnumber=$(printf %02d ${i})
    tracktotal="$(metaflac --show-tag=tracktotal "${directory}/${discnumber} "*.flac \
      | awk -F '=' '{print $NF}' | sort -u)" \
      || { echo "Fehler CD ${i}, ${directory}"; exit; }

    #prüfen ob Zahl der Titel einer CD in allen Dateien dieser CD übereinstimmt
    test $(echo "${tracktotal}" | wc -l | awk '{print $1}') -gt 1 \
      && { echo "Fehler Zahl der Titel, CD ${i}, ${directory}"; continue; }

    for j in $(seq 1 ${tracktotal}); do
        tracknumber=$(printf %02d ${j})
        flacfile="${directory}/${discnumber} ${tracknumber}.flac"
		
        #flac -wt "${flacfile}" &> /dev/null || echo "Fehler #${j}, CD ${i}, ${directory}"
        test -e "${flacfile}" || echo "#${j}, CD ${i} fehlt, ${directory}"
    done
done

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

Re: Unterverzeichnisse mit flac-Dateien finden

Beitrag von smutbert » 15.04.2025 22:59:35

Den Thread hier hätte ich ja fast vergessen. Danke für eure Hilfe.

Das größte Aha-Erlebnis hatte ich beim Schreiben meines vorigen Beitrags mit der Idee mit »sort -u« und hinterher »wc -l« festzustellen ob ein Tag, z.B. die Zahl der CDs bei allen Dateien in einem Verzeichnis denselben Wert hat. Gegenüber dem Skript aus meinem vorigen Beitrag habe ich noch weitere Überprüfungen hinzugefügt und in bash-Funktionen verpackt.
Das Skript hat dann für ein einzelnes Album/Verzeichnis perfekt funktioniert und ich habe es in eine weitere Schleife der Form

Code: Alles auswählen

find -name '*.flac' -exec dirname {} \; | sort -u | while read -r line ; do
        directory="${line}"

        ...
done
eingepackt.

Ich nehme an das ganze ist zu sehr auf meinen Anwendungsfall spezialisiert, als dass es für andere nützlich ist. Sollte ich mich hier irren würde ich versuchen das Skript etwas aufzuräumen und natürlich zur Verfügung stellen.


Es waren übrigens alle Dateien noch dort wo sie hingehören und alle Tags in Ordnung.

Antworten