Am Montag 13 April 2009 02:33:19 schrieb David Haller: Hallo David,
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).
Vielleicht kann exiftool mittlerweile auch Delimiter. Mehrere Felder abfragen ist ja kein Problem. exiftool -q -q -s -s -s -Album -Artist 01_theme_from_harrys_game- clannad-1989_past_present.mp3 1989 - Past Present Clannad Das würde alles natürlich gewaltig beschleunigen, dass das am meisten Zeit braucht.
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).
Das Trennzeichen wäre mir egal, notfalls kann man es ja zum Schluss ersetzen. Die Frage ist nur welches Trennzeichen. Es darf in der CDDB nicht vorkommen. Wie würdest du die find-Schleife lösen? Wichtig ist, dass id3info mit UTF-8 klar kommt. man id3info No manual entry for id3info id3info -h id3info 3.8.3 Usage: id3info [OPTIONS]... [FILES]... -h --help Print help and exit -V --version Print version and exit -a --assign Test the assignment operator (default=off) -w --warning Turn on warnings (for debugging) (default=off) -n --notice Turn on notices (for debugging) (default=off) Ich werde daraus nicht schlau, wie die Syntax genau lautet.
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.
Vielen Dank David, wie immer super! Fällt dir noch was ein, wie man "Various" ans Ende bringt? Irgendein Sonderzeichen davor half nicht. Al PS: Habe es mir angetan 3 Rechner umzubauen. Dabei bekam ich den starken Verdacht, dass die Rechner, die manchmal unerklärlich einfrieren nur im Runlevel 5 Probleme machen, im Runlevel 3 habe ich das noch nie beobachtet. Vielleicht ein Einergiesparproblem? Es scheint unabhängig von nv bzw. nvidia zu sein. -- 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