Gentoo Archives: gentoo-user-de

From: Klaus Fabritius <kfk@××××××××××.de>
To: gentoo-user-de@l.g.o
Subject: Re: [gentoo-user-de] Bash-Script um id3-Tags auszuwerten
Date: Wed, 18 Jan 2006 22:33:50
Message-Id: 20060118223042.GA20085@mid.wasserhase.de
In Reply to: Re: [gentoo-user-de] Bash-Script um id3-Tags auszuwerten by Sebastian Damm
1 * Sebastian Damm schrieb:
2 > Am 18. Januar 2006 schrieb Volker Katz:
3 >> Die Dateien finde ich mit find und die id3-Tags kann ich mit id3info
4 >> auslesen: find /home/musik -iname '*.mp3' -exec id3info {} \;
5 >> Aus id3info die BPMs extrahieren, kann man so machen:
6 >> id3info file.mp3 | grep TBPM | cut -c 36-
7 >
8 > ===== 8< ===== Schnipsel ausm Kopf ohne Testen =====================
9 >
10 > #!/bin/bash
11 >
12 > FILENAME=path/to/filename
13 >
14 > if [ -f "$FILENAME" ]
15 > then
16 > rm "$FILENAME"
17 > touch "$FILENAME"
18 > fi
19
20 Wenn es eh überschrieben wird kann man auch einfach drauflos:
21
22 echo -n > "$FILENAME"
23
24
25 > for i in `find /home/musik -iname '*.mp3'`
26
27 Ist vielleicht antik, aber bei "for in in 'was mit *'" bekomme ich immer
28 Bauchgrimmen, besser fände ich da:
29
30 find ... | while read i
31
32 Weiterhin gibt es Probleme mit Blanks in Dateinamen (bei mp3s nicht
33 selten):
34
35 $> ls
36 foo.mp3
37 baz baz.mp3
38 qux.mp3
39
40 $> for i in `find /home/musik -iname '*.mp3'` ; do echo "$i"; done
41 ./bar
42 baz.mp3
43 ./foo.mp3
44 ./qux.mp3
45
46
47 Da muß IFS ran:
48
49 $> find /home/musik -iname '*.mp3' | while IFS= read i ; do echo "$i" ; done
50 ./bar baz.mp3
51 ./foo.mp3
52 ./qux.mp3
53
54 Sauber.
55
56
57 > do
58 > BPM=`id3info "$i" | grep TBPM | cut -c 36-`
59 > let BPM=$BPM/4
60
61 Da muss aber sicher sein, daß $BPM keine Blanks enthält:
62
63 $> BPM="4 "
64 $> let BPM=$BPM/4
65 $> echo $BPM
66 4
67
68 Hängt natürlich vom Datenmaterial ab, also ggf. tr oder sed drüber
69 laufen lassen. Vielleicht sollte man sich das aber auch alles sparen und
70 gannzen Krams durch awk ersetzen. Dazu müste man mal ein paar
71 Beispieldatensätze sehen (ich habe nur *.ogg hier ;-). Awk ist wirklich
72 sehr mächtig.
73
74
75 > echo "$i $BPM" >> "$FILENAME"
76 > done
77 >
78 > cat "$FILENAME" | sort -n > "FILENAME".sorted
79
80 Das sortiert numerisch nach Dateiname ($i schreibst Du ja an die erste
81 Stelle). Auch braucht man kein "cat":
82
83 sort -k 2 -n $FILENAME > "$FILENAME".sorted
84
85
86 Mal mein Gegenvorschlag (untested magels mp3s) mit awk, die Feldnummer
87 muß ggf. angepasst werden:
88
89 | #!/bin/sh
90 |
91 | FILENAME=path/to/filename
92 | echo -n > "$FILENAME"
93 |
94 | find /home/musik -iname '*.mp3' | while IFS= read i
95 | do
96 | BPM=`id3info "$i" | awk '{print $2/4}'` # $2 Feldnummer, ggf anpassen!
97 | echo "$i $BPM" >> "$FILENAME"
98 | done
99 |
100 | sort -k 2 -n $FILENAME > "$FILENAME".sorted
101
102 Falls es sich um viele Dateien handelt, ist es vielleicht sinnvoller den
103 awk auszulagern: In der Schleife Dateiname und id3info in eine Datei
104 schreiben und danach über diese Datei den awk (vielleicht auch schon
105 sortieren) laufen lassen. Bei möglicherweise tausenden von Dateien,
106 spart das dann enorm Zeit.
107
108
109 -kfk
110
111 --
112 Object-oriented design is the roman numerals of computing.
113 Rob Pike, 1991
114 --
115 gentoo-user-de@g.o mailing list

Replies

Subject Author
[gentoo-user-de] Re: Bash-Script um id3-Tags auszuwerten Christof Schulze <christof.schulze@×××.net>