Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I would like a BASH command to list just the count of files in each subdirectory of a directory.

E.g. in directory /tmp there are dir1, dir2, ... I'd like to see :

`dir1` : x files 
`dir2` : x files ...
share|improve this question

2 Answers 2

up vote 4 down vote accepted

Assuming you want a recursive count of files only, not directories and other types, something like this should work:

find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | wc -l
share|improve this answer
works perfectly! thanks. –  jldupont Sep 14 '12 at 21:36
Also, I get "find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments." –  jldupont Sep 14 '12 at 21:38
Both answers given so far will give incorrect results in the unlikely case that there are files whose names include newline characters. You can handle that with a find ... -print0 | xargs -0 .... –  Scott Sep 14 '12 at 21:57
@jldupont: move the depth arguments before the ´-type d´, I've edited the answer. –  Thor Sep 14 '12 at 22:58
bonus points for nice formatting! –  Andreas Petersson Nov 1 '13 at 7:09

Using find is definitely the way to go if you want to count recursively, but if you just want a count of the files directly under a certain directory:

ls dir1 | wc -l

share|improve this answer
I don't want to do this for each of the 1000's of directories I've got there... –  jldupont Sep 14 '12 at 21:37
Then use xargs. ls -d */ | xargs -n1 ls | wc -l (Use the answer you accepted if it already works, though! This is just And Now You Know.) –  jrajav Sep 14 '12 at 21:41
your proposal didn't show up any results in many seconds whereas the answer I accepted did. –  jldupont Sep 15 '12 at 8:03

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.