[erledigt] Wie viele Dateinamen per script ändern?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

[erledigt] Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 17:35:39

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
Zuletzt geändert von outis am 19.07.2016 23:28:15, insgesamt 1-mal geändert.
LG

Jochen

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 16.07.2016 17:43:28

An welchem Punkt kommst du denn nicht weiter?

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 17:49:44

Geht schon damit los, die Audiodateien als solche zu ermitteln.

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
Und mit file rekursiv in den Unterverzeichnissen zu suchen, klappt auch nicht. -R meint bei file offenbar etwas anderes.

Code: Alles auswählen

file --mime-type -R 8 * 
Good Things: inode/directory
Und such mal nach file in den Suchmaschinen...
LG

Jochen

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 16.07.2016 18:01:49

Du suchst die Manpage von find (Debianfindutils)? Dabei gehe ich mal davon aus, dass der Suffix jeweils passt.

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 18:04:29

Die suche ich nicht, die habe ich ja (offenbar nicht richtig verstanden).
LG

Jochen

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 16.07.2016 18:11:48

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:

Code: Alles auswählen

$ file blub.ogg 
blub.ogg: Ogg data, Vorbis audio, stereo, 44100 Hz, ~192000 bps, created by: Xiph.Org libVorbis I
… kann man doch prima nach „Vorbis audio“ greppen?

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 18:39:49

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?
LG

Jochen

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 16.07.2016 18:41:00

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 Problem ist zunächst, dass file mir nur so eine pauschale Angabe vorsetzt und eben nicht differenziert nach mp3, flac etc.
Das Verhalten hast du ihm explizit vorgegeben.

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 18:44:40

Ja, sorry, ich vergaß die zweite Hälfte:

Code: Alles auswählen

$ file --mime-type * |grep -i audio
$
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 18:47:39

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

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 16.07.2016 18:52:35

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.

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 19:03:56

Ja, danke, das mit der option kommt davon, wenn man zu viel auf google & Co. gibt.
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 16.07.2016 22:46:19

Bäh - was für ein Chaos an unterschiedlicher Dateinamenbenennung:

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
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. ;)
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 17.07.2016 22:38:45

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

DeletedUserReAsG

Re: Wie viele Dateinamen per script ändern?

Beitrag von DeletedUserReAsG » 17.07.2016 22:51:50

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.

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 17.07.2016 22:56:08

niemand hat geschrieben:Ist der Kram denn wenigstens sauber getagged?
Leider nicht. Man glaubt gar nicht, welchen Wildwuchs und Unfug kommerzielle DL-Anbieter z.T. in die Tags schreiben.
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 18.07.2016 00:17:07

Mal sehen, wie weit wir damit kommen:

Code: Alles auswählen

name=$(echo "$fb"|sed 's/^[[:digit:]]*//;s/-[[:digit:]]*//;s/[[:punct:]]*//' )
Erste Tests sind vielversprechend.

$fb ist der aktuelle komplette Dateiname.
LG

Jochen

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

Re: Wie viele Dateinamen per script ändern?

Beitrag von hikaru » 18.07.2016 09:32:00

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. ;) ).
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.

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 Debianexfalsound/oder Debianeasytag an!

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 18.07.2016 22:31:42

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?
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 19.07.2016 01:01:26

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.
LG

Jochen

outis
Beiträge: 395
Registriert: 07.10.2005 12:28:01

Re: Wie viele Dateinamen per script ändern?

Beitrag von outis » 19.07.2016 23:27:31

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
LG

Jochen

Antworten