回答:
(必要代わりにこれを試してみてfindの-printfサポートを):
find <expr> -type f -printf '.' | wc -c行を数えるよりも信頼性が高く、高速です。
注私が使用するfindのprintfではなく、外部コマンドを。
少しベンチを取りましょう:
$ ls -1
a
e
l
ll.sh
r
t
y
z
私のスニペットのベンチマーク:
$ time find -type f -printf '.' | wc -c
8
real    0m0.004s
user    0m0.000s
sys     0m0.007s
フルラインで:
$ time find -type f | wc -l
8
real    0m0.006s
user    0m0.003s
sys     0m0.000s
だから私の解決策はより高速です=)(重要な部分はrealラインです)
-printf '.'
                    何故なの
find <expr> | wc -lシンプルなポータブルソリューションとして?元のソリューションは、 printf見つかった個々のファイルごとに新しいプロセスを生成するため、非常にコストがかかります(今見つけたように)。
改行が埋め込まれたファイル名がある場合、これは過大評価されますが、それがある場合、問題が少し深く実行されると思います。
この解決策は、他のいくつかの解決策よりも確かに遅くなりfind -> wcますが、ファイル名をカウントするだけでなく、ファイル名を使用して別のことをする傾向がある場合readは、find出力から行うことができます。
n=0
while read -r -d ''; do
    ((n++)) # count
    # maybe perform another act on file
done < <(find <expr> -print0)
echo $n
これは、BashGuideで見つかったソリューションの変更であり、find出力区切り文字をを使用してNULバイトにしprint0、''ループ区切り文字として(NULバイト)を使用してそこから読み取ることにより、非標準名のファイルを適切に処理します。