453
357

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-10-01

連番の空ファイルを生成するワンライナーでファイルを作成したものの、
ウン十万・ウン百万個以上のファイルを作成すると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
453
357
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
453
357

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?