PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Leerzeichen in Verzeichnissen.



Holger Specht
20-06-2006, 08:27
Ich möchte in einem Bash-Script alle Unerverzeichnisse nacheinander abarbeiten.

Dazu habe ich mir überlegt, die Verzeichnisse mit "find * -maxdepth 0 -type d" zu bestimmen. Funktioniert soweit auch:


$ find * -maxdepth 0 -type d
APPDATA
My Documents
test

Wenn das jetzt aber in eine for-Schleife reinpacke:

for i in `find * -maxdepth 0 -type d`; do
echo $i
done

Dann wird aus dem "My Documents" ein "My" und ein "Documents":


$ for i in `find * -maxdepth 0 -type d`; do
> echo $i
> done
APPDATA
My
Documents
test


Wie vehindere ich, daß Verzeichnisse mit Leerzeichen auseinander dividiert werden?

Gruß
Holger

bischi
20-06-2006, 08:38
Ev geht es besser, wenn du statt find ein

ls -1

nimmst.

MfG Bischi

Holger Specht
20-06-2006, 08:48
Das hilft mir leider nicht. Zum einen will ich ja nur die Verzeichnisse und zum anderen werden Leerzeichen in der For-Schleife immernoch als Trenner betrachtet.
Aus "My Documents" wird auch mit ls -1 ein "My" und ein "Documents".

bischi
20-06-2006, 08:59
ls -d -1

und das ganze dann _zeilenweise_ einlesen.

MfG Bischi

Holger Specht
20-06-2006, 09:05
ls -d -1

und das ganze dann _zeilenweise_ einlesen.

MfG Bischi

Ok. Danke. Nur dieses zeilenweise bereitet mir Probleme. Wie genau stelle ich das an?

Gruß und Danke für die Mühe
Holger

bischi
20-06-2006, 09:30
Ok - so stark bin ich im Bash-Scripten auch nicht...

Neuer Vorschlag:

ls -p -m

Alle Einträge werden durch , getrennt. Jedes Verzeichnis hat als letztes Zeichen ein /.

Vielleicht hilft das weiter....

MfG Bischi

Holger Specht
20-06-2006, 09:44
Nein, leider nicht, weil das Leerzeichen nach wie vor als Separator betrachtet wird.

Vielleicht hat ja noch jemand eine Idee.

Gruß
Holger

Pingu
20-06-2006, 12:05
Ja, nimm das NULL-Zeichen als Seperator (Option: -print0). xargs und andere Tools können dann damit auch umgehen. Einfach mal in die entsprechende man-Page schauen.

Code: find ./ -type d -maxdepth 0 -exec echo "{}" \;
Oder: find ./ -type d -maxdepth 0 -print0 | xargs -0 …

Pingu

Romanday
21-06-2006, 00:44
Ja, nimm das NULL-Zeichen als Seperator (Option: -print0). xargs und andere Tools können dann damit auch umgehen.
Pingu

Gute Idee.

Die Probleme treten erneut auf, wenn er mal einen crazy FTP
Server durchsuchen möchte, oder die ganze Sonderzeichen Pallette
in Verzeichnis oder Dateinamen vorkommen.

In solchen Fällen sind Shellscripte sehr arbeitsaufwendig bis ungeeignet.