Not uncommonly I have to count the number of files in a directory, sometimes this runs into the millions.
Is there a better way than just enumerating and counting them with find . | wc -l
?
Is there some kind of filesystem call you can make on ext3/4 that is less I/O intensive?
Best Answer
Not a fundamental speed-up but at least something :)
You really do not need to pass the list of file names, just the newlines suffice. This variant is about 15 % faster on my Ubuntu 12.04.3 when the directories are cached in RAM. In addition this variant will work correctly with file names containing newlines.
Interestingly this variant seems to be a little bit slower than the one above:
Special case - but really fast
If the directory is on its own file system you can simply count the inodes:
If the number of directories and files in other directories than the counted one do not change much you can simply subtract this known number from the current
df -i
result. This way you will be able to count the files and directories very quickly.