Wie du es im Code-Block hast ist es schon richtig. Den "Streich" spielt dir das "ls" zum
"Sammeln" der Dateien 😉
Gebeben 3 Dateien in x:
h.TXT
hallo du.txt
user.txt
und dieses Skript (halt ohne convert, aber mit ls zur Verdeutlichung):
#!/bin/sh
for file in $(ls *.txt *.TXT)
do ls "$file"
done
(Das $(BEFEHL) ist das gleiche wie BEFEHL in Backquotes(`))
Als Ausgabe kommt:
[gerhard@tux1 x]$ sh t.sh
h.TXT
ls: Zugriff auf hallo nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf du.txt nicht möglich: Datei oder Verzeichnis nicht gefunden
user.txt
Innerhalb der Schleife wird also versucht sowohl ein ls auf hallo zu machen als auch auf
du.txt obwohl es eigentlich ja eine Datei ist. Das kommt daher, das die Ausgabe von
ls schon nicht mehr entscheiden kann: was ist eine datei, was zwei da der Trenner
normalerweise das Leerzeichen ist.
Wird auch deutlich bei Z.B.:
ls *.txt *.TXT
h.TXT hallo du.txt user.txt
Anhand des Suchmusters ist es ja noch ersichtlich, aber bei einem ls ohne Suchmuster
ist nicht mehr unterscheidbar: ist hallo jetzt eine eigene Datei?
find als Datensammler ist da besser geeignet, da man per Schalter diesen Problemfall
behandeln kann. Oder die Shell das Problem lösen lassen:
for file in *.{txt,TXT}
ergibt:
hallo du.txt
user.txt
h.TXT
Sehr hilfreich bei solchen Problemen ist -x als Parameter der Shell, da dieses dir alle
Variablen und Aufrufe zeigt bzw. auflöst. Beim Problemaufruf kommt z.B.:
[gerhard@tux1 x]$ sh -x t.sh
++ ls 'hallo du.txt' user.txt h.TXT
+ for file in '$(ls *.txt *.TXT)'
+ ls h.TXT
h.TXT
+ for file in '$(ls *.txt *.TXT)'
+ ls hallo
ls: Zugriff auf hallo nicht möglich: Datei oder Verzeichnis nicht gefunden
+ for file in '$(ls *.txt *.TXT)'
+ ls du.txt
ls: Zugriff auf du.txt nicht möglich: Datei oder Verzeichnis nicht gefunden
+ for file in '$(ls *.txt *.TXT)'
+ ls user.txt
user.txt
Hier sieht man, das es in Zeile 1 passiert: ls trennt die Problemdatei zwar durch einfache
Anführungsstriche, es müßten für die korrekte Weiterverabeitung aber Doppelte sein.
Ich hoffe, das kam jetzt so ungefähr rüber 😉