Rekurencyjne iterowanie plików w katalogu można łatwo wykonać:
find . -type f -exec bar {} \;
Powyższe nie działa jednak w przypadku bardziej skomplikowanych rzeczy, w których należy wykonać wiele rozgałęzień warunkowych, zapętlenie itp. Użyłem tego do powyższych celów:
while read line; do [...]; done < <(find . -type f)
Wydaje się jednak, że nie działa to w przypadku plików zawierających niejasne znaki:
$ touch $'a\nb'
$ find . -type f
./a?b
Czy istnieje alternatywa, która dobrze radzi sobie z tak mało znanymi postaciami?
read line
na IFS= read -r line
. Jedyną postacią, która go wtedy złamie, jest nowa linia.
-d $'\0'
lepiej.
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;
jest lepszym sposobem na zrobienie tego.