Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: [EN] bash loop: Verzeichnisse mit Leerzeichen  (Read 9794 times)

Offline cas

  • User
  • Posts: 401
[EN] bash loop: Verzeichnisse mit Leerzeichen
« on: 2017/01/25, 19:11:46 »
EDIT:
I would like to iterate over directories in bash.
I dont know how to do it, when directories have empty space in their names.
+++++++++++++++++++++++++++++++++++++++++++


Hallo,
ich möchte über Verzeichnisnamen iterieren, bspw mit einer for-Schleife.

Was mache ich, wenn Verzeichnisnamen Leerzeichen enthalten?

Bspw im CWD habe ich die Verzeichnisse "bla bla bla", "foo bar", etc , über die iteriert werden soll.

Bislang habe ich die Verzeichnisnamen immer umbenannt, so dass keine Leerzeichen mehr vorkamen, aber das muss doch anders gehen.


Grüße, C
« Last Edit: 2017/01/25, 20:02:26 by cas »

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #1 on: 2017/01/25, 19:26:11 »
wie wäre es mit Anführungszeichen
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

Offline cas

  • User
  • Posts: 401
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #2 on: 2017/01/25, 19:58:22 »
Leider funktioniert das nicht.

Code: [Select]
$ mkdir "bla bla bla" "foo bar"

$ for DIR in  "bla\ bla\ bla" "foo\ bar" ; do cd $DIR; ls ;  cd - ;done
bash: cd: Zu viele Argumente.

$ for DIR in  'bla\ bla\ bla' 'foo\ bar' ; do cd $DIR; ls ;  cd - ;done
bash: cd: Zu viele Argumente.

Außerdem würde ich dies gerne generieren lassen, ähnlich wie ls, falls es mal sehr viele Verzeichnisse sind, bzw damit ich es immer wieder verwenden kann.

Gruss, C

Offline musca

  • User
  • Posts: 725
  • sid, fly high!
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #3 on: 2017/01/25, 20:06:56 »
Hallo cas,

das Problem ist dein
Code: [Select]
cd $DIR
die shell ersetzt zuerst den Variablennamen durch deren Inhalt, dann wird die entstehende Zeile interpretiert.
Dabei enstehen im Allgemeinen durch die Leerzeichen neue Bedeutungen.

melmarker meinte genau diese Lösung:
Code: [Select]
cd "$DIR"
Dabei verhindern die Anführungsstriche, dass der Verzeichnisname in mehrere Argumente zerfällt.

bashly greetings
musca
„Es irrt der Mensch, solang er strebt.“  (Goethe, Faust)

Offline cas

  • User
  • Posts: 401
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #4 on: 2017/01/25, 20:22:32 »
verstehe.
danke!

Offline cas

  • User
  • Posts: 401
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #5 on: 2017/01/25, 21:34:01 »
Soweit, so gut. Aber jetzt kommt die Preisfrage.  :)

Wie kann ich die Verzeichnisnamen automatisiert der Variable $DIR zuweisen?
Ich bekomme entweder 1 String oder 5 Strings. Da es aber zwei Verzeichnisse sind, müssten es 2 Strings sein.

NB: Eigentlich will ich in die Verzeichnisse rein, aber bereits ls funktioniert nicht.

Code: [Select]
$ echo "$(ls)"
bla bla bla
foo bar

$ for DIR in  "$(ls)"; do  ls "$DIR"  ;done
ls: Zugriff auf 'bla bla bla'$'\n''foo bar' nicht möglich: Datei oder Verzeichnis nicht gefunden


Code: [Select]
$ ls -Q
"bla bla bla"  "foo bar"
for DIR in  $(ls -Q); do  ls "$DIR"  ;done
ls: Zugriff auf '"bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bla"' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf '"foo' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bar"' nicht möglich: Datei oder Verzeichnis nicht gefunden



Code: [Select]
ls --quoting-style=shell
'bla bla bla'  'foo bar'

$ for DIR in  $(ls --quoting-style=shell); do  ls "$DIR"  ;done
ls: Zugriff auf "'bla" nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf "bla'" nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf "'foo" nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf "bar'" nicht möglich: Datei oder Verzeichnis nicht gefunden



Code: [Select]
$ echo "$(ls -b)"
bla\ bla\ bla
foo\ bar

cas@cinna:~/bla$ for DIR in  "$(ls -b )"; do  ls "$DIR"  ;done
ls: Zugriff auf 'bla\ bla\ bla'$'\n''foo\ bar' nicht möglich: Datei oder Verzeichnis nicht gefunden

cas@cinna:~/bla$ for DIR in  $(ls -b ); do  ls "$DIR"  ;done
ls: Zugriff auf 'bla\' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bla\' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bla' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'foo\' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'bar' nicht möglich: Datei oder Verzeichnis nicht gefunden



Offline cas

  • User
  • Posts: 401
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #6 on: 2017/01/25, 21:42:13 »

Angabe von "LANG=C" erzeugt Syntaxfehler ?!!


Code: [Select]
$ for DIR in  foo\ bar/ bla\ bla\ bla/; do  echo "$DIR"  ;done
foo bar/
bla bla bla/


$ LANG=C for DIR in  foo\ bar/ bla\ bla\ bla/; do  echo "$DIR"  ;done
bash: Syntaxfehler beim unerwarteten Wort `do'

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #7 on: 2017/01/25, 22:17:34 »
$IFS heisst glaube ich das Zauberwort
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

Offline cas

  • User
  • Posts: 401

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #9 on: 2017/01/25, 22:23:56 »
und ab da wird es ekelig - ifs (internal fieldname separator) müsste dann vor der schleife gesetzt werden und nach der schleife zurückgesetzt- weil man sich sonst irgendwann fürchterlich die Füsse wegschießt-
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

Offline musca

  • User
  • Posts: 725
  • sid, fly high!
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #10 on: 2017/01/25, 23:17:00 »
Die Ausgabe von ls ist definitiv nur für Menschen zum Lesen gedacht.

Die Shell kann sich ganz leicht selbst Verzeichnisse oder Dateien ansehen:

Code: [Select]
user@sidbox:~$ for my_dir in *; do if [[ -d ${my_dir} ]]; then printf "%s\n" "${my_dir}"; fi done
bin
bla bla bla
Desktop
Downloads
foo bar
iota
jessie
lib
Pictures
sid
VirtualBox VMs

user@sidbox:~$ for my_dir in {'bla bla bla',foo\ bar}; do if [[ -d ${my_dir} ]]; then printf "%s\n" "${my_dir}"; fi done
bla bla bla
foo bar

Ih gitt, ich habe auch ein Verzeichnis mit einem Space im Namen.
„Es irrt der Mensch, solang er strebt.“  (Goethe, Faust)

Offline melmarker

  • User
  • Posts: 2.799
    • g-com.eu
Re: bash loop: Verzeichnisse mit Leerzeichen
« Reply #11 on: 2017/01/26, 00:00:06 »
was hat nu git damit zu tun :D
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)