Gentoo Archives: gentoo-user-de

From: Klaus Fabritius <kfk@××××××××××.de>
To: gentoo-user-de@l.g.o
Subject: Re: [gentoo-user-de] Re: Bash-Script um id3-Tags auszuwerten
Date: Thu, 19 Jan 2006 09:49:01
Message-Id: 20060119094553.GA930@mid.wasserhase.de
In Reply to: Re: [gentoo-user-de] Re: Bash-Script um id3-Tags auszuwerten by Renat Golubchyk
1 * Renat Golubchyk schrieb:
2 > Die Manpage von Bash kann eine aufschlußreiche Lektüre sein, wenn man
3 > sie auch liest ;-) Guckt euch die Beschreibung der Variable IFS an.
4 > Folgendes habe ich eben zum Testen geschrieben:
5 >
6 > =======================================================
7 > #!/bin/bash
8 >
9 > IFS='
10 > '
11
12 Welchen Vorteil soll das gegenüber " .. | while IFS= read .." haben?
13 Unser beider Scripte haben den "Bug", daß Dateien mit Newline im Namen
14 das Script vor die Wand laufen lassen.
15
16 Falls der OP davon ausgehen muß, daß Newline (vielleicht sogar ganze
17 Leerzeilen, Backslashes oder gar ASCII-0) im Dateinamen auftauchen, wäre
18 die Zeit gekommen zu überlegen ob man das nicht besser mit einer anderen
19 Sprache (Perl, Python, Ruby, Tcl ... es gibt ja genug) lösen sollte. Man
20 bekommt das zwar immer noch mit Shell erschlagen, aber das wird dann
21 doch arg unleserlich und fehleranfällig (das gibt dann ORs und ANDs und
22 mehrere execs in einem find, eklich sowas).
23
24 Newline in Dateinamen kann man zumindest aus der Bearbeitung ausnehmen
25 und Backslashes dem read mit -r schmackhaft machen um das Script etwas
26 robuster zu machen:
27
28 find /path ! -name "*
29 *" -a -iname '*.mp3' | while IFS= read -r i ; do echo "$i" ; done
30
31 Und die Newline-Dateien dann separat bearbeiten (ginge zwar auch anders,
32 aber das will /ich/ dann nicht mehr mit Shell machen).
33
34
35 > files=$(find "${HOME}/music/" -name '*.mp3' -type f)
36
37 Ja, "-type f" natürlich. "-iname" sollte aber schon sein.
38
39 > let i=0
40 > for f in ${files};
41
42 Das ist ja nur die lang-Version von "for i in `was mit *`", was ich (sagte
43 ich das schon? ;-), bei unbekannter Größe von "*" (also immer) meide wie
44 der Teufel das Weihwasser.
45
46
47 > do
48 > let i++
49 > echo "${i} ---> \"${f}\""
50 > done
51 > =======================================================
52
53
54
55 -kfk
56
57 --
58 Object-oriented design is the roman numerals of computing.
59 Rob Pike, 1991
60 --
61 gentoo-user-de@g.o mailing list