[erledigt] Wie viele Dateinamen per script ändern?
[erledigt] Wie viele Dateinamen per script ändern?
Ich bin nicht der scripter vor dem Herrn. Daher die Bitte an euch zur Lösung folgender Aufgabe:
1. Finde alle audio files (in einem Rutsch alle unterschiedlichen Typen, z.B. flac, wav, mp3 etc. pp.) im Musikverzeichnis und seinen Unterverzeichnissen.
2. Prüfe, ob der Name jeder Audiodatei mit Ziffern beginnt.
3. Wenn das nicht der Fall ist, lies den tag Tracknummer aus und benenne die Datei so um, dass der Name aus "Tracknummer - alter Dateiname" besteht.
4. Falls der tag Tracknummer leer/nicht vorhanden (so bei wav etwa) ist, schreibe Verzeichnis/Dateinamen in eine Textdatei zur späteren Bearbeitung des tags/des Dateinamens.
TIA
1. Finde alle audio files (in einem Rutsch alle unterschiedlichen Typen, z.B. flac, wav, mp3 etc. pp.) im Musikverzeichnis und seinen Unterverzeichnissen.
2. Prüfe, ob der Name jeder Audiodatei mit Ziffern beginnt.
3. Wenn das nicht der Fall ist, lies den tag Tracknummer aus und benenne die Datei so um, dass der Name aus "Tracknummer - alter Dateiname" besteht.
4. Falls der tag Tracknummer leer/nicht vorhanden (so bei wav etwa) ist, schreibe Verzeichnis/Dateinamen in eine Textdatei zur späteren Bearbeitung des tags/des Dateinamens.
TIA
Zuletzt geändert von outis am 19.07.2016 23:28:15, insgesamt 1-mal geändert.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
An welchem Punkt kommst du denn nicht weiter?
Re: Wie viele Dateinamen per script ändern?
Geht schon damit los, die Audiodateien als solche zu ermitteln.
file wirft mir nur pauschal das aus:
Und mit file rekursiv in den Unterverzeichnissen zu suchen, klappt auch nicht. -R meint bei file offenbar etwas anderes.
Und such mal nach file in den Suchmaschinen...
file wirft mir nur pauschal das aus:
Code: Alles auswählen
file --mime-type *
I Need A Dollar.mp3: application/octet-stream
Green Lights.mp3: application/octet-stream
Code: Alles auswählen
file --mime-type -R 8 *
Good Things: inode/directory
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Du suchst die Manpage von find (findutils)? Dabei gehe ich mal davon aus, dass der Suffix jeweils passt.
Re: Wie viele Dateinamen per script ändern?
Die suche ich nicht, die habe ich ja (offenbar nicht richtig verstanden).
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Ich denke, du suchst alle Audiofiles *.{mp3|ogg|wav|flacc|…}, um sie weiterzubearbeiten? Das wäre nunmal finds Job. Wenn du tatsächlich nur die Dateien mit kaputter Dateinamenserweiterung suchst, dann könntest du file auf jede einzelne Datei im Verzeichnis loslassen und das Ergebnis parsen. Allerdings würde ich auch dafür find hernehmen, und files Ausgabe nicht künstlich einschränken:
… kann man doch prima nach „Vorbis audio“ greppen?
Code: Alles auswählen
$ file blub.ogg
blub.ogg: Ogg data, Vorbis audio, stereo, 44100 Hz, ~192000 bps, created by: Xiph.Org libVorbis I
Re: Wie viele Dateinamen per script ändern?
Ja, ich suche alle diese Audiofiles. Ich habe nur mittlerweile zu viele unterschiedliche Typen, als die noch alle im Kopf zu haben. Und die Dateiendungen sind nicht das Problem. Das Problem ist zunächst, dass file mir nur so eine pauschale Angabe vorsetzt und eben nicht differenziert nach mp3, flac etc.
Ob mir da die Tatsache einen Streich spielt, dass das Musikverzeichnis per nfs-mount vom NAS eingebunden sind. Mag file das nicht?
Ob mir da die Tatsache einen Streich spielt, dass das Musikverzeichnis per nfs-mount vom NAS eingebunden sind. Mag file das nicht?
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
file ist kein Programm, um Dateien zu suchen, sondern um Informationen über eine gegebene Datei auszugeben. Das wäre der Punkt, in dem sowas wie ›find [Optionen] exec file {} \;‹ ins Spiel käme. Auf welchem FS die Datei dann liegt, ist file dabei ziemlich egal.
Das Verhalten hast du ihm explizit vorgegeben.Das Problem ist zunächst, dass file mir nur so eine pauschale Angabe vorsetzt und eben nicht differenziert nach mp3, flac etc.
Re: Wie viele Dateinamen per script ändern?
Ja, sorry, ich vergaß die zweite Hälfte:
Code: Alles auswählen
$ file --mime-type * |grep -i audio
$
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Ach lasst gut sein. Ich bin einfach zu blöd für das Ding und setzte mich ein anderes Mal in Ruhe wieder ran oder lasse es bleiben.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Dann lass’ halt mal die Einschränkung weg und schau’, was es dann ausgibt? Abgesehen davon wäre nun ’n guter Zeitpunkt, die Version zu verraten – bei mir (5.28) gibt’s mit der fraglichen Option bei z.B. mp3 „audio/mpeg“ aus.
Ändert aber nix an der Tatsache, dass file nicht zum Suchen/Finden von Files gedacht ist, und daher nicht rekursiv Verzeichnisse entlangrödelt.
Ändert aber nix an der Tatsache, dass file nicht zum Suchen/Finden von Files gedacht ist, und daher nicht rekursiv Verzeichnisse entlangrödelt.
Re: Wie viele Dateinamen per script ändern?
Ja, danke, das mit der option kommt davon, wenn man zu viel auf google & Co. gibt.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Bäh - was für ein Chaos an unterschiedlicher Dateinamenbenennung:
Wäre optimal, alles Geraffel vor dem eigentlichen Titel des Stücks zu entfernen und dann die Tracknummer voranzustellen.
Wozu das Ganze? Es gibt leider Player/Apps, die Playlists nur alphabetisch sortieren, aber nicht nach Tracknummern. Das gibt dann nette Neukompositionen.
Code: Alles auswählen
001 Ansage.mp3
001.mp3
01-01- About A Girl.mp3
01 01 Julia Fischer - III. Allegro giocoso, ma non troppo.flac
01 1. Satz.mp3
01 - A Faust Symphony_ I. Faust.mp3
01 Ancient Languagez.mp3
01_Anmoderation_Ravel.mp2
01 coppelia act ii scene 1 scene - valse~1.mp3
01SymphonyNo.4InFMinorOp.36_.mp3
1. Allegro.mp3
WC050_03_El_Cuarto_De_Tula.mp3
Discothek im 2(DRS 2) - Klassik_00.mp3
(Disc 3) 04 - Symphony No.4 in A, Op.90 - _Italian_ - 4. Sal.mp3
13-DJ-KOZE _ NooOoo.mp3
Wozu das Ganze? Es gibt leider Player/Apps, die Playlists nur alphabetisch sortieren, aber nicht nach Tracknummern. Das gibt dann nette Neukompositionen.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Helft mir bitte mal auf die Sprünge: Ich habe zwar mittels tr alles, was kein Buchstabe ist, aus dem Dateinamen (übungshalber als String) entfernen können. Aber wie bekomme ich es hin, dass das Gelumpe nur bis zum ersten Auftreten eines Buchstabens weggeschnitten wird (um den Fall (Disc1) kümmern wir uns später. ).
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Ist der Kram denn wenigstens sauber getagged? Dann würde ich den Dateinamen komplett aus den Tags neu bauen, statt ewig an ’nem Script zu sitzen, bis es alle vorhandenen Namensschemata verarbeiten kann.
Re: Wie viele Dateinamen per script ändern?
Leider nicht. Man glaubt gar nicht, welchen Wildwuchs und Unfug kommerzielle DL-Anbieter z.T. in die Tags schreiben.niemand hat geschrieben:Ist der Kram denn wenigstens sauber getagged?
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Mal sehen, wie weit wir damit kommen:
Erste Tests sind vielversprechend.
$fb ist der aktuelle komplette Dateiname.
Code: Alles auswählen
name=$(echo "$fb"|sed 's/^[[:digit:]]*//;s/-[[:digit:]]*//;s/[[:punct:]]*//' )
$fb ist der aktuelle komplette Dateiname.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Das hilft dir nicht, denn es gibt auch Titel die Nummern als Teil des Namens enthalten. Spontan fallen mir da "7 Shots" und "Room 24" von Volbeat ein.outis hat geschrieben:Helft mir bitte mal auf die Sprünge: Ich habe zwar mittels tr alles, was kein Buchstabe ist, aus dem Dateinamen (übungshalber als String) entfernen können. Aber wie bekomme ich es hin, dass das Gelumpe nur bis zum ersten Auftreten eines Buchstabens weggeschnitten wird (um den Fall (Disc1) kümmern wir uns später. ).
Ich würde ebenfalls vorschlagen, die Dateinamen aus sauberen(!) Tags zu generieren. Hast du auch die nicht, dann hast du ohnehin eine Menge Handarbeit vor dir, denn ohne halbwegs saubere Eingangsdaten kann man erfahrungsgemäß bei der Entwicklung des Scripts gar nicht so blöd denken, um alle Sonderfälle sinnvoll abzufangen.
Es hat zwar nichts mit Scripting zu tun, aber schau dir mal exfalsound/oder easytag an!
Re: Wie viele Dateinamen per script ändern?
Im Prinzip hast ja Recht. aber einige hundert Verzeichnisse mit einem Programm wie mp3tag durchzugehen, ist langweilig im Vergleich zum Basteln eines scripts.
Das entwickelt sich übrigens.
Allerdings habe ich im Moment ein Problem mit einem Vergleich.
Wenn ein Dateiname mit einer Ziffernfolge beginnt, die mit der Tracknummer identisch ist, braucht's ja keine zusätzliche Tracknummer vorweg.
Also soll geprüft werden, ob die ersten zwei Zeichen eines Dateinamens identisch mit der Tracknummer sind.
Folglich habe ich zwei Variablen: tn für tracknummer und name1 für die ersten zwei Zeichen.
Wie vergleiche ich die nun auf Gleichheit?
if [ "$tn" == "$name1" ] ergibt ein unexpected operator für die Tracknummer,
if [ "$tn" -eq "$name1" ] ergibt ein illegal number für name1
Eigentlich logisch, da unterschiedliche Dinge verglichen werden. In anderen Sprachen würde man z.B. die beiden Werte als string deklarieren. Ich habe nur noch nichts gefunden, ob und wie man das für die bash machen kann. Geht das überhaupt? Oder welche andere Lösung wäre möglich?
Das entwickelt sich übrigens.
Allerdings habe ich im Moment ein Problem mit einem Vergleich.
Wenn ein Dateiname mit einer Ziffernfolge beginnt, die mit der Tracknummer identisch ist, braucht's ja keine zusätzliche Tracknummer vorweg.
Also soll geprüft werden, ob die ersten zwei Zeichen eines Dateinamens identisch mit der Tracknummer sind.
Folglich habe ich zwei Variablen: tn für tracknummer und name1 für die ersten zwei Zeichen.
Wie vergleiche ich die nun auf Gleichheit?
if [ "$tn" == "$name1" ] ergibt ein unexpected operator für die Tracknummer,
if [ "$tn" -eq "$name1" ] ergibt ein illegal number für name1
Eigentlich logisch, da unterschiedliche Dinge verglichen werden. In anderen Sprachen würde man z.B. die beiden Werte als string deklarieren. Ich habe nur noch nichts gefunden, ob und wie man das für die bash machen kann. Geht das überhaupt? Oder welche andere Lösung wäre möglich?
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
Ah, womögliche Lösung des Problems:
Prüfen, ob name1 ein integer ist und nur dann den Vergleich durchführen. Wenn name1 kein integer ist, kann's keine tracknummer sein.
Mal sehen, ob das konsequent klappt.
Prüfen, ob name1 ein integer ist und nur dann den Vergleich durchführen. Wenn name1 kein integer ist, kann's keine tracknummer sein.
Mal sehen, ob das konsequent klappt.
LG
Jochen
Jochen
Re: Wie viele Dateinamen per script ändern?
So, weitgehend erledigt, der Rest folgt bei Gelegenheit = wenn ich mal wieder Zeit habe. Für Interessierte: Ausgangspunkt war das hier vorgenommene Verfahren:
http://www.unix.com/302416202-post4.htm ... ffff101895
Es musste halt "nur" das script angepasst werden
http://www.unix.com/302416202-post4.htm ... ffff101895
Es musste halt "nur" das script angepasst werden
LG
Jochen
Jochen