LoginSignup
341

More than 5 years have passed since last update.

posted at

updated at

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

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

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
What you can do with signing up
341