[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: