xargsの結果をリダイレクトでファイルに出力する時に無限ループにしない

特定のディレクトリにあるファイルを全部catして、結果をファイルに保存したい時に最初に以下のように書いてみた。

 find . -type f | xargs cat > all.txt

やってみるとわかるが、これだと無限に実行が終了せずにall.txtにどんどんデータが書き込まれてファイルサイズが巨大になっていく。

対処

対処法としてはxargsで直接catに渡さずにshコマンドを経由して実行すると解決した

find . -type f| xargs -I@ sh -c 'cat "@" >> names.txt '