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 need to organise an external HDD such that there is no more than 500 folders on it. Ubuntu's "Properties" pane shows only the file count, not the folder count.

Is there a simple command line that will tell me the number of subdirectories?

I need to count recursively, and the drive is an external HDD mounted at /media/MUSIC/. It's for a car stereo system whose documentation says it only reads the first 500 folders.

share|improve this question

5 Answers 5

up vote 7 down vote accepted

Navigate to your drive and simply execute

ls -lR | grep ^d | wc -l
share|improve this answer
1  
Sorry that does not recursively count folders within subfolders. –  Dean Rather Aug 2 '13 at 6:48
    
Yeah 'r' must be 'R'. Capital R not the small one. Edited the answer. –  Aniket Thakur Aug 2 '13 at 8:10
    
This appears to provide a more correct number than the answer I accepted 3 years ago. It counted the directory I was in whereas this done not. –  Dean Rather Aug 5 '13 at 0:50
    
I see different numbers as well, but not too different. –  SPRBRN Apr 16 at 12:49

Find all folders in total, including subdirectories?

find /mount/point -type d | wc -l

...or find all folders in the root directory (not including subdirectories)?

find /mount/point -maxdepth 1 -type d | wc -l
share|improve this answer
    
That first one is exactly what I'm after. Thanks! –  Dean Rather Apr 9 '10 at 6:07
    
@Dean: yeah, i've used it for counting directories in my music collection before too. :) for braggin' rights, count your MP3s: find /mount/point -type f | grep -i mp3 | wc -l –  quack quixote Apr 9 '10 at 6:17
1  
@Dean: yeah, i don't know the find syntax offhand, but i'd usually use grep -v for that: find /mount/pt -type f | grep -vi mp3 | grep -vi wav | wc -l ...(and <i></i> doesn't work in comments, use *foo* to italicize: foo ) –  quack quixote Apr 9 '10 at 6:25
1  
@Dean: i think you'd just use find /path -not -iname '*.mp3' | wc -l to filter MP3s, or to get both MP3s and WAVs use find /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l –  quack quixote Apr 9 '10 at 6:28
1  
Needed to add the -type f in order for it to ignore folders as well, but congrats! I just found a whole bunch of m4a files I had no idea about... Thanks! –  Dean Rather Apr 9 '10 at 6:53

New lines are valid characters in directory names. I suggest letting find print an empty line for each directory found and then letting wc count those lines.

find /mount/point -type d -printf '\n' | wc -l
share|improve this answer

Try the following [see below]:

ls -1 -p | grep "/" | wc -l

This will print a one-column list of the current directory, with trailing slashes for items that are subdirectories, then count the lines with the slashes.

EDIT: you should probably go with quack quixote's answer, as it is a little more explicit, but I've corrected mine (after taking quack's suggestions into account).

ls -Rp | grep "/$" | wc -l
share|improve this answer
    
Need to add -R to go recursive (sorry for failing to mention), and need to specify the path to ls, but yeah, this works: ls -1 -p -R /media/MUSIC/ | grep "/" | wc -l Thanks! –  Dean Rather Apr 9 '10 at 6:05
    
After trying both this and quack quixote's suggestion, I got 2 different results... I'm inclined to believe the other one. Thanks anyway! –  Dean Rather Apr 9 '10 at 6:07
    
you don't need the -1 since ls will detect the pipe and won't format columns. also you can grab recursive listings with -R, but then you probably want to grep for "/$" to only match trailing slashes (or the count will be off). final version: ls -Rp | grep "/$" | wc -l –  quack quixote Apr 9 '10 at 6:10
    
the find version i posted will count . (ie /mount/point) in its count, the ls version in my above comment won't. those counts differ by 1, tho you could use /mount/point/* in the find command to correct that (assuming no hidden dot-directories). –  quack quixote Apr 9 '10 at 6:13
    
i'm not sure why you got the two differnent results, but @quack's method will include "hidden" directories (ie. those that begin with '.'). –  stuntmouse Apr 9 '10 at 8:45

I like to use tree to pull directory count with

tree -d -R -fi --noreport | wc -l

Or, ill use find to show bulk of the folders are located with

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
share|improve this answer

Your Answer

 
discard

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.