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.

Possible Duplicate:
How can I count the number of folders in a drive using Linux?

I have a really deep directory tree on my Linux box. I would like to count all of the files in that path, including all of the subdirectories.

For instance, given this directory tree:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

If I pass in /home, I would like for it to return four files. Or, bonus points if it returns four files and two directories. Basically, I want the equivalent of right-clicking a folder on Windows and selecting properties and seeing how many files/folders are contained in that folder.

How can I most easily do this? I have a solution involving a Python script I wrote, but why isn't this as easy as running ls | wc or similar?

share|improve this question

marked as duplicate by Peter Mortensen, Synetech, Randolph West, 8088, Indrek Aug 20 '12 at 13:41

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
Not exactly what you're looking for, but to get a very quick grand total, if your locate database is up to date: locate /some/path | wc -l (or on my Mac: locate -c /some/path). But: this will also count files in /this/other/path/with/some/path, and will count the folders themselves. –  Arjan Nov 13 '10 at 9:44
    
By the way, this is a different, but closely related problem (counting all the directories on a drive) and solution: superuser.com/questions/129088/… –  Amanda Jun 20 '12 at 14:05
    
@Amanda thanks! –  omghai2u Jun 24 '12 at 1:02

5 Answers 5

up vote 91 down vote accepted

find . -type f | wc -l

Explanation:
find . -type f finds all files ( -type f ) in this ( . ) directory and in all sub directories, the filenames are then printed to standard out one per line.

This is then piped | into wc (word count) the -l option tells wc to only count lines of its input.

Together they count all your files.

share|improve this answer
    
Delicious. Thanks! 8 minutes till I can accept this. :) –  omghai2u Oct 12 '10 at 21:47

For files:

find -type f | wc -l

For directories:

find -mindepth 1 -type d | wc -l

They both work in the current working directory.

share|improve this answer

With bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

No need to call find twice if you want to search for files and directories

share|improve this answer

Slight update to accepted answer, if you want a count of dirs and such

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn
share|improve this answer
    
On a Mac/BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (Here, type %T is empty for a regular file, an asterisk for an executable file, or a slash for a folder; hence %HT is needed, or some extra text to avoid the space from not being counted, like > %T.) –  Arjan Nov 13 '10 at 10:03

The answers above already answer the question, but I'll add that if you use find without arguments (except for the folder where you want the search to happen) as in:

find . | wc -l

the search goes much faster, almost instantaneous, or at least it does for me. This is because the type clause has to run a stat() system call on each name to check its type - omitting it avoids doing so.

This has the difference of returning the count of files plus folders instead of only files, but at least for me it's enough since I mostly use this to find which folders have huge ammounts of files that take forever to copy and compress them. Counting folders still allows me to find the folders with most files, I need more speed than precision.

share|improve this answer

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