Re: Bash Zauberei
Patrick Cornelißen <cornelis@p-c-software.de> writes:
> for i in `find ./ -type d`; do
Martin Dickopp <martin-deb@zero-based.org> writes:
> find ./ -type d | while read i; do
>
> Solltest Du allerdings auch Dateinamen haben, die Zeilenumbrüche
> ("Newlines") enthalten, wird es etwas komplizierter:
>
> find ./ -type d -print0 | xargs -0 bash -c 'while [ $# -gt 0 ]; do
> i="$1"
> # Hier etwas mit "$i" machen
> shift
> done' "$0"
Also ich hab jetzt mal ausprobiert, IFS anders zu setzen. Solange
keine Newlines im Dateinamen sind, geht
IFS="
"
for i in `find ./ -type d`; do
# do some nice things ...
done
Unter der zsh kann ich IFS auch auf controll Zeichen setzen, also
z.Bsp (^A ist ein echtes Contrl-A, also in emacs C-q C-a):
IFS="^A"
for in in `find ./ -type d -printf "%p^A"`; do
# blablabla
done
Leider geht das in der bash nicht. Und mit \0 aka ^@ hab ichs garnicht
hingekriegt.
Wer allerdings newlines in seinen Dateinamen hat gehört sowieso
erschossen :-) (ok, ich weiss, es könnte jemand so eine Datei mit
böswilliger Absicht angelegt haben ...)
Stefan.
Reply to: