ディレクトリ内のファイル数をカウントする

  • 165
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

連番の空ファイルを生成するワンライナーでファイルを作成したものの、
ウン十万・ウン百万個以上のファイルを作成するとlsするだけでも時間がかかる。

1. lsを使ってカウント

$ ls -1 | wc -l

-1オプションで1行に1ファイル表示させ、wc -lで行数をカウントする

行数でなく単語数(ファイル数)でカウントしてもよい

$ ls | wc -w

2. findを使ってカウント

$ find . -type f | wc -l

カウント速度を比較してみる

10万ファイルを作成し比較

$ seq -f "file_%06g" 100000 | xargs touch
$ time ls -1 | wc -l
100000

real 0m0.357s
user 0m0.320s
sys 0m0.044s

$ time find . -type f |wc -l
100000

real 0m0.162s
user 0m0.020s
sys 0m0.152s

lsの方が遅いのか?

lsはデフォルトでソートを実施するので時間がかかる。
そこで、-Uオプションを用いるとソートを実施しないようにする

$ ls -U1 | wc -l

カウント速度を計測

$ time ls -U1 | wc -l
100000

real 0m0.068s
user 0m0.020s
sys 0m0.052s

findよりも早くなりました。

(※13/10/02 追記)
lsでサブディレクトリを考慮して厳密にカウントするなら、下記のようにしたほうがよいとコメントを頂きました。

ls -F | grep -v / | wc -l