Re: Leerzeichen in Dateinamen

2004-10-11 Diskussionsfäden Tilo Schwarz
On Sunday 10 October 2004 20:30, Christoph Conrad wrote:
 Hi Tilo,

  find . -name '*.jpg' -print | while read file; do echo $file;
  done
 
  while: Expression Syntax.

 Seltsam...

 Ich verwende GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)

 Herzliche Grüße,
   Christoph

Wirklich seltsam, war wohl ein BB (Brain Bug ;-), kanns nicht 
reproduzieren...

Grüße,

Tilo



Re: Leerzeichen in Dateinamen

2004-10-11 Diskussionsfäden Robert Grimm
Christoph Conrad [EMAIL PROTECTED] wrote:
 ,
| [EMAIL PROTECTED]/n touch 'eine datei.jpg'
| [EMAIL PROTECTED]/n for i in `ls *.jpg`; do echo $i; done
| eine
| datei.jpg
 `

Was soll eigentlich das ls?

,
| [EMAIL PROTECTED]:~/jpgt]$ touch 'eine datei.jpg'
| [EMAIL PROTECTED]:~/jpgt]$ for i in *.jpg; do echo $i; done
| eine datei.jpg
| [EMAIL PROTECTED]:~/jpgt]$
`

R 'warum einfach...' ob
-- 
In C we had to code our own bugs. 
In C++ we can inherit them.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Leerzeichen in Dateinamen

2004-10-11 Diskussionsfäden Christoph Conrad
Hi Robert,

 for i in *.jpg; do echo $i; done

Boah...

 R 'warum einfach...' ob

Das war z einfach ;-)

Herzliche Grüße,
  Christoph
-- 
[...] denn es ist die Sprache, die den Strom der Zeit anhält. Es
existiert keine Statik, es gibt keine Endgültigkeit des Anfangs und des
Endes. Heinz von Foerster


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Leerzeichen in Dateinamen

2004-10-09 Diskussionsfäden Christoph Conrad
Hi Dirk,

 for i in `ls *.jpg` ; do echo $i ; done

Bisschen anders, aber sinngemäß:

find . -name '*.jpg' -print | while read file; do echo $file; done

Herzliche Grüße,
  Christoph
-- 
[...] denn es ist die Sprache, die den Strom der Zeit anhält. Es
existiert keine Statik, es gibt keine Endgültigkeit des Anfangs und des
Endes. Heinz von Foerster


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Leerzeichen in Dateinamen

2004-10-09 Diskussionsfäden Uwe Malzahn
Am Samstag, 9. Oktober 2004 21:45 schrieb Dirk Richter:
 for i in `ls *.jpg` ; do echo $i ; done

Wie wärs mit

for i in *.jpg ; do echo $i ; done

/tmp$ ls *.jpg
bar.jpg  foo bar.jpg  foo.jpg

/tmp$ for i in *.jpg ; do echo $i ; done
bar.jpg
foo bar.jpg
foo.jpg

Gruß,
Uwe

-- 
Keine Angst vor Windows. Ungeladen ist es völlig harmlos.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: Leerzeichen in Dateinamen

2004-10-09 Diskussionsfäden Jan Trippler
Am Samstag, 9. Oktober 2004 23:11 schrieb Uwe Malzahn:
 Am Samstag, 9. Oktober 2004 21:45 schrieb Dirk Richter:
  for i in `ls *.jpg` ; do echo $i ; done
[...]
 for i in *.jpg ; do echo $i ; done
 /tmp$ ls *.jpg
 bar.jpg  foo bar.jpg  foo.jpg
 /tmp$ for i in *.jpg ; do echo $i ; done
 bar.jpg
 foo bar.jpg
 foo.jpg

Das ist nicht das Gleiche:
[EMAIL PROTECTED]:~/tmp/leer touch a b c.jpg a  b  c.jpg
[EMAIL PROTECTED]:~/tmp/leer ls -l
insgesamt 0
-rw-r--r--  1 jan users 0 2004-10-10 01:29 a  b  c.jpg
-rw-r--r--  1 jan users 0 2004-10-10 01:29 a b c.jpg
[EMAIL PROTECTED]:~/tmp/leer for i in *.JPG; do echo $i; done
*.JPG
[EMAIL PROTECTED]:~/tmp/leer for i in `ls *.JPG`; do echo $i; done
/bin/ls: *.JPG: Datei oder Verzeichnis nicht gefunden

Und noch was: Vorsicht mit ungequoteten Argumenten:
[EMAIL PROTECTED]:~/tmp/leer for i in *.jpg; do echo $i; done
a b c.jpg
a b c.jpg
[EMAIL PROTECTED]:~/tmp/leer for i in *.jpg; do echo $i; done
a  b  c.jpg
a b c.jpg

Mit folgender Variante klappt es auch mit Leerzeichen:
[EMAIL PROTECTED]:~/tmp/leer ls *.jpg | while read i; do echo $i; done
a  b  c.jpg
a b c.jpg
[EMAIL PROTECTED]:~/tmp/leer ls *.JPG | while read i; do echo $i; done
/bin/ls: *.JPG: Datei oder Verzeichnis nicht gefunden

Der Nachteil ist hier, dass die Schleife in einer Subshell abläuft 
(also innerhalb der Schleife gesetzte Variablen aussen nicht  
sichtbar sind):
[EMAIL PROTECTED]:~/tmp/leer f=xyz
[EMAIL PROTECTED]:~/tmp/leer ls *.jpg | while read i; do f=$i; done
[EMAIL PROTECTED]:~/tmp/leer echo $f
xyz

Will man das umgehen, dann greift man doch wieder auf die 
for-Schleife zurück und stellt in der Schleife sicher, dass es 
tatsächlich Dateien gibt:
[EMAIL PROTECTED]:~/tmp/leer for i in *.JPG; do test -f $i || break; echo 
$i; done

Jan

P.S.: Die Intelligenz der for-Schleife ist nicht kompatibel zu 
anderen Shells.

-- 
Linux-Quickies: http://www.jan-trippler.de
PingoS: http://www.pingos.org



Re: Leerzeichen in Dateinamen

2004-10-09 Diskussionsfäden Jan Trippler
Am Samstag, 9. Oktober 2004 22:59 schrieb Christoph Conrad:
  for i in `ls *.jpg` ; do echo $i ; done

 Bisschen anders, aber sinngemäß:

 find . -name '*.jpg' -print | while read file; do echo $file;
 done

Nein, das ist nicht sinngemäß. find sucht rekursiv, findet also 
auch .jpg-Dateien in Unterverzeichnissen. Um sinngemäß zu bleiben, 
sollte zumindest noch ein -maxdepth 1 ergänzt werden:
find . -name '*.jpg' -maxdepth 1 -print | while read file; do echo 
$file;
done

Und mit der while-Schleife brauchst Du den find gar nicht. Nimm 
stattdessen den ls, dann hast Du das gleiche Ergebnis.

Jan

-- 
Linux-Quickies: http://www.jan-trippler.de
PingoS: http://www.pingos.org