2259エントリのディレクトリでこれを試し、timeコマンドを使用しました。
time for f in *; do echo "$f"; done(マイナスファイル!)の出力は次のとおりです。
real    0m0.062s
user    0m0.036s
sys     0m0.012s
time find * -prune | while read f; do echo "$f"; done(マイナスファイル!)の出力は次のとおりです。
real    0m0.131s
user    0m0.056s
sys     0m0.060s
キャッシュミスをなくすために、各コマンドを数回実行しました。これは、出力bashを使用findして(toにbash)パイプするよりも(for i in ...)に保持することをお勧めします
完全を期すfindために、あなたの例では完全に冗長なので、からパイプを落としました。justの出力find * -pruneは次のとおりです。
real    0m0.053s
user    0m0.016s
sys     0m0.024s
また、time echo *(出力は改行で区切られていません、悲しいかな):
real    0m0.009s
user    0m0.008s
sys     0m0.000s
この時点で、echo *それほど多くの改行を出力していないため、出力がそれほどスクロールしていないので、理由はもっと速いと思います。テストしてみましょう...
time find * -prune | while read f; do echo "$f"; done > /dev/null
収量: 
real    0m0.109s
user    0m0.076s
sys     0m0.032s
一方、time find * -prune > /dev/null収量:
real    0m0.027s
user    0m0.008s
sys     0m0.012s
およびtime for f in *; do echo "$f"; done > /dev/null収量:
real    0m0.040s
user    0m0.036s
sys     0m0.004s
そして最後に:time echo * > /dev/nullyields:
real    0m0.011s
user    0m0.012s
sys     0m0.000s
変動の一部はランダムな要因で説明できますが、明らかなようです: 
- 出力が遅い
- 配管には少し費用がかかります
- for f in *; do ...は- find * -prune、それ自体ではより遅いですが、パイプを含む上記の構造では、より速くなります。
また、余談ですが、両方のアプローチは、スペースで問題なく名前を処理するように見えます。
編集:
find . -maxdepth 1 > /dev/null対のタイミングfind * -prune > /dev/null:
time find . -maxdepth 1 > /dev/null:
real    0m0.018s
user    0m0.008s
sys     0m0.008s
find * -prune > /dev/null:
real    0m0.031s
user    0m0.020s
sys     0m0.008s
したがって、追加の結論:
- find * -pruneより遅い- find . -maxdepth 1-前者では、シェルはglobを処理してから、の(大きな)コマンドラインを構築してい- findます。注意:を- find . -prune返します- .。
その他のテスト   time find . -maxdepth 1 -exec echo {} \; >/dev/null::
real    0m3.389s
user    0m0.040s
sys     0m0.412s
結論: 
- これまでで最も遅い方法。このアプローチが提案された答えに対するコメントで指摘されたように、各引数はシェルを生成します。
 
              
find見つかったファイルを開きません。多数のファイルに関してここで噛みついているのはARG_MAXだけです。