以下を使用すると、ディレクトリ内のファイルを再帰的に簡単に繰り返すことができます。
find . -type f -exec bar {} \;
しかし、上記の方法は、実行すべき条件分岐、ループなどが多いため、より複雑な作業には適していません。私はこれを上で使用しました:
while read line; do [...]; done < <(find . -type f)
しかし、これはあいまいな文字を含むファイルでは機能しないようです。
$ touch $'a\nb'
$ find . -type f
./a?b
これらのあいまいな文字をうまく処理する他の方法はありますか?
ベストアンサー1
別の用途があります。安全find
:
while IFS= read -r -d '' -u 9
do
[Do something with "$REPLY"]
done 9< <( find . -type f -exec printf '%s\0' {} + )
(これはすべてのPOSIXで動作しますfind
が、シェル部分にはbashが必要です。* BSDとGNU findを使用すると代わりに-print0
findを使用できますが、-exec printf '%s\0' {} +
これは少し高速です。)
これにより、ループ内で標準入力を使用でき、次のように使用できます。どの道。