Servus zusammen, ich kapier da grad was nicht: # find . -type d | grep -E " $" | while read x; do echo "\"$x\""; done […] "./MP/.MH-Mail Archiv.Kunden" […] Ich möchte also Verzeichnisse finden, die auf ein Leerzeichen enden. Warum enthält $x dann Pfade, die nicht auf ein Leerzeichen enden? Tatsächlich gibt es ca. 5000 Verzeichnisse mit Leerzeichen am Ende, und $x endet in keinem Fall mit einem Leerzeichen. Warum? -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Andre Tann, Freitag, 9. Dezember 2011:
# find . -type d | grep -E " $" | while read x; do echo "\"$x\""; done […] "./MP/.MH-Mail Archiv.Kunden" […]
Ich möchte also Verzeichnisse finden, die auf ein Leerzeichen enden. Warum enthält $x dann Pfade, die nicht auf ein Leerzeichen enden?
Tatsächlich gibt es ca. 5000 Verzeichnisse mit Leerzeichen am Ende, und $x endet in keinem Fall mit einem Leerzeichen.
Ich sollte vielleicht noch hinzufügen: obige Konstruktion findet durchaus diejenigen Verzeichnisse, die auf " $" enden. Aber ich kann sie mit obiger Konstruktion nicht umbenennen, weil $x eben nicht den tatsächlichen Dateinamen enthält. Natürlich könnte ich das " " anhängen, aber ich würde trotzdem gerne kapieren, was da vor sich geht. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Andre Tann wrote:
Andre Tann, Freitag, 9. Dezember 2011:
# find . -type d | grep -E " $" | while read x; do echo "\"$x\""; done [...] "./MP/.MH-Mail Archiv.Kunden" [...]
Ich möchte also Verzeichnisse finden, die auf ein Leerzeichen enden. Warum enthält $x dann Pfade, die nicht auf ein Leerzeichen enden?
Tatsächlich gibt es ca. 5000 Verzeichnisse mit Leerzeichen am Ende, und $x endet in keinem Fall mit einem Leerzeichen.
Ich sollte vielleicht noch hinzufügen: obige Konstruktion findet durchaus diejenigen Verzeichnisse, die auf " $" enden. Aber ich kann sie mit obiger Konstruktion nicht umbenennen, weil $x eben nicht den tatsächlichen Dateinamen enthält.
Natürlich könnte ich das " " anhängen, aber ich würde trotzdem gerne kapieren, was da vor sich geht.
<Idee> Das "Problem" ist: " " ist Teil von $IFS; damit wird nur der Teil vor dem space der Variable zugewiesen. Versuche mal vor der Schleife: oldIFS=IFS; IFS='' find ... IFS=$oldIFS </Idee> Andreas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Fri, Dec 09, 2011 at 01:26:52PM +0100, Andre Tann wrote:
Andre Tann, Freitag, 9. Dezember 2011:
# find . -type d | grep -E " $" | while read x; do echo "\"$x\""; done […] "./MP/.MH-Mail Archiv.Kunden" […]
Ich möchte also Verzeichnisse finden, die auf ein Leerzeichen enden. Warum enthält $x dann Pfade, die nicht auf ein Leerzeichen enden?
Tatsächlich gibt es ca. 5000 Verzeichnisse mit Leerzeichen am Ende, und $x endet in keinem Fall mit einem Leerzeichen.
Ich sollte vielleicht noch hinzufügen: obige Konstruktion findet durchaus diejenigen Verzeichnisse, die auf " $" enden. Aber ich kann sie mit obiger Konstruktion nicht umbenennen, weil $x eben nicht den tatsächlichen Dateinamen enthält.
Natürlich könnte ich das " " anhängen, aber ich würde trotzdem gerne kapieren, was da vor sich geht.
Ich vermute die shell schneidet das space weg beim "read". evt mal eher probieren: find . -type d | grep -E " $" | sed -e 's/^/"/;s/$/"/;' Oder mit find -printf ... aufarbeiten. Ciao, Marcus -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Marcus Meissner, Freitag, 9. Dezember 2011:
Ich vermute die shell schneidet das space weg beim "read". evt mal eher probieren:
find . -type d | grep -E " $" | sed -e 's/^/"/;s/$/"/;'
read in Verbindung mit IFS sind die Übeltäter. Denn read denkt immer, es lese ein Argument, dann einen Trenner, dann aber kein zweites Argument. Habe mein Problem damit nun lösen können, danke. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Fri, 09 Dec 2011, Andre Tann schrieb:
ich kapier da grad was nicht:
# find . -type d | grep -E " $" | while read x; do echo "\"$x\""; done [...] "./MP/.MH-Mail Archiv.Kunden" [...]
Ich möchte also Verzeichnisse finden, die auf ein Leerzeichen enden. Warum enthält $x dann Pfade, die nicht auf ein Leerzeichen enden?
Keine Ahnung. Hier geht's: $ ( set -x ; echo -e "foo \nbar" | grep -E " $"; ) + echo -e 'foo \nbar' + grep -E ' $' foo Aber warum grep? find . -type d -name '* ' -printf '"%p"\n' HTH, -dnh -- Wenn man keine Vögel mag, ist es völlig in Ordnung, mit Kanonen auf Spatzen zu schiessen. -- ratti in suse-linux -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
David Haller, Freitag, 9. Dezember 2011:
Keine Ahnung. Hier geht's: $ ( set -x ; echo -e "foo \nbar" | grep -E " $"; ) + echo -e 'foo \nbar' + grep -E ' $' foo
So schon. Aber wie ich nebenan schon schrieb: # echo "Hallo " | while read x; do echo "\"$x\""; done "Hallo" # IFS=''; echo "Hallo " | while read x; do echo "\"$x\""; done "Hallo "
Aber warum grep?
find . -type d -name '* ' -printf '"%p"\n'
War Teil einer größeren Konstruktion, habe ich nur verkürzt. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Friday, 09 December 2011 16:22:29 Andre Tann wrote:
Keine Ahnung. Hier geht's: $ ( set -x ; echo -e "foo \nbar" | grep -E " $"; ) + echo -e 'foo \nbar' + grep -E ' $' foo
So schon. Aber wie ich nebenan schon schrieb:
# echo "Hallo " | while read x; do echo "\"$x\""; done "Hallo"
Vielleicht hilft das hier ja weiter: $ echo 'huhu ' | (read -r; echo \'"$REPLY"\') 'huhu ' Torsten Förtsch -- Need professional modperl support? Hire me! (http://foertsch.name) Like fantasy? http://kabatinte.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (5)
-
Andre Tann
-
David Haller
-
Kyek, Andreas, VF-DE
-
Marcus Meissner
-
Torsten Förtsch