Hallo, Am Don, 09 Apr 2009, Al Bogner schrieb:
Ich überlege ein simples Shell-Skript um meine CDs neu zu ordnen.
Problem sind die CDs mit mehreren Künstlern (Various), wobei ich hier einen Kompromiss eingehe und definiere, dass die CD durch den Albumtitel bestimmt ist, mehrmals ein Album "Best of" ist also ein Problem, das ich vernachlässige.
Abgefragt wird so:
find "$SEARCHDIR" -type f -name "*.mp3" | while IFS= read -r MP3FILE; do echo `/usr/bin/exiftool -q -q -s -s -s -Album "$MP3FILE"`" | "`/usr/bin/exiftool -q -q -s -s -s -Artist "$MP3FILE"` | tee -a "$ALL" done
Gibt es ein Möglichkeit beim find eine Dual-Core CPU zu nutzen?
AFAIK nein. Das würde eh nur was bringen, wenn alle Dateiinfos im Cache sind, da Festplatte + Dateisystem das ganze begrenzen. Beobachte doch mal mit top oder so, was so ein find an CPU (nicht) braucht. Das 'exiftool' könnte man wohl parallelisieren und/oder ins awk-Script (s.u.) aufnehmen (dort allerdings AFAIK nicht parallelisierbar, in Perl ginge das). BTW: mit id3info z.B. kannst du Album und "Artist" mit einer Abfrage rausziehen. Und '|' ist als Trennzeichen nicht so praktisch (wenn auch schön lesbar).
Ich denke, dass es das einfachste ist, "Artist" durch etwas zu ersetzen, zB "Various", dann kann ich alle Sampler zusammenfassen und den Text einfach sortieren. Doch wie mache das am effizientesten? Letztlich soll noch das 1. Feld und das 2. Feld getauscht werden. Mein Verdacht ist, dass es mit awk eine Lösung geben könnte, aber damit bin ich zuwenig vertraut.
Ergebnis sollte sein:
Enya | Shepherd Moons Enya | The Celts Máire Brennan | Máire Various | The Best Folk
$ echo 'Máire | Máire Brennan Shepherd Moons | Enya The Best Folk | Dublin City Ramblers The Best Folk | Jim McCann The Best Folk | Mary Black The Best Folk | Paddy Reilly The Best Folk | Ronnie Drew & The Dubliners The Best Folk | Stocktons Wing The Best Folk | The Dubliners The Best Folk | The Fureys & Davey Arthur The Celts | Enya ' | sort | ~/bin/albumsort Enya | Shepherd Moons Enya | The Celts Máire Brennan | Máire Various | The Best Folk ==== albumsort ==== #!/usr/bin/gawk -f BEGIN { FS=" *\\| *"; OFS=" | "; } function output() { if (various == 1 && $1 != lastalbum) { print "Various", lastalbum | "sort"; } else { print lastartist, lastalbum | "sort"; } } lastalbum { if( $1 == lastalbum ) { various = 1; } else { output(); various = 0; } } { lastalbum = $1; lastartist = $2; } END { output(); } ======== In einem Perlscript könnte man übrigens das find (File::Find), das Tag-Abfragen (z.B. Audio::TagLib*, MP3::ID3Lib, MPEG::ID3v2Tag oder auch per Image::ExifTool::ID3) und Nachbearbeiten (samt sortieren) in einem Aufwasch erledigen. Theoretisch auch unter Ausnutzung von mehreren CPUs, aber ich glaube nicht, daß das was bringen würde, da das Dateisystem die Geschwindigkeit begrenzt. HTH, -dnh PS: war die letzten paar Tage nicht daheim -- Und dann steht die Merkel dann da. Wie sie so da steht, wenn sie so da steht. Wenn's schwierig wird, dann steht sie ja immer erstmal da, und dann guckt sie so. Dann guckt sie so und dann denk ich immer: "Die is genauso gespannt, was sie gleich sagen wird, wie ich." -- Volker Pispers, "Bis neulich" (2007) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org