Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

連番の空ファイルを生成するワンライナーでファイルを作成したものの、
ウン十万・ウン百万個以上のファイルを作成すると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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away