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 |