ディレクトリ内のファイルを再帰的に検索

ディレクトリ内のファイルを再帰的に検索

以下を使用すると、ディレクトリ内のファイルを再帰的に簡単に繰り返すことができます。

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を使用すると代わりに-print0findを使用できますが、-exec printf '%s\0' {} +これは少し高速です。)

これにより、ループ内で標準入力を使用でき、次のように使用できます。どの道。

おすすめ記事