ディレクトリ内のファイルの再帰的な反復は、次の方法で簡単に実行できます。
find . -type f -exec bar {} \;
ただし、上記は、多くの条件分岐、ループなどを行う必要があるより複雑なものには機能しません。私はこれを上記に使用していました。
while read line; do [...]; done < <(find . -type f)
ただし、これはあいまいな文字を含むファイルでは機能しないようです:
$ touch $'a\nb'
$ find . -type f
./a?b
そのようなあいまいな文字をうまく処理する代替手段はありますか?
read line
にはIFS= read -r line
。それを壊す唯一の文字は改行です。
-d $'\0'
が好ましい理由です。
find ... -exec bash -c 'echo filename is in \$0: "$0"' {} \;
より良い方法です。