カレントディレクトリ(というか任意のディレクトリ)以下すべてのファイル数を数えるなら大体の人が
find ./ -type f| wc -l
とするでしょう、おそらく。
しかし待ってほしい。パイプの細かいことは知らんけど、単純に考えるとこれだとfindから出力されたフルパスなり相対パスなりの文字列がバッファされてパイプ経由でwcが食ってる状態と考えられないだろうか。というかそうだよね?ためしに家のサーバの / で実行したらfindが出力した文字列は約16MBになった。これはでかすぎやしないだろうか。そこでいろいろ考えて
find ./ -type f -printf 0| wc -c
としてみた。これならパイプ経由で渡される文字列は259KBくらい。で、一番重要な速度はというと
[root@myserver /]# time (find / -type f| wc -l) 264656 real 0m3.252s user 0m1.072s sys 0m2.048s [root@myserver /]# time (find / -type f -printf 0| wc -c) 264656 real 0m2.427s user 0m0.723s sys 0m1.701s
約26万ファイルで0.8秒差ってとこ。数千万ファイルあるサーバとかならもっと差が出るかも。しかし結局のところパイプで一度バッファしてる感じなので、これどうにかfindだけで完結できないかなーと思って調べてたけど、結局わからなかった。
お過ぎさん、あとは任せた。