I want to find the total count of the number of files under a folder and all its sub folders.
9 Answers
Maybe something like this will do the trick:
find . -type f | wc -l
Try the command from the parent folder.
find . -name <pattern> -type ffinds allfiles in the current folder (.) and its subfolders.-name <pattern>only looks for certain files that match the specified pattern. The match is case-sensitive. If you need the match to be case-insensitive, use-inameinstead.- The result (a list of files found) is passed (
|) towc -lwhich counts the number oflines.
- 12,964
- 10
- 49
- 77
- 23,668
- 12
- 72
- 85
-
3The solution will fail on files which names contain a newline. – user unknown Apr 08 '11 at 14:23
-
2@user unknown: `find . -type f -ls | wc -l` – arrange Nov 22 '13 at 21:24
-
2even faster: `find . -type f -print0 | tr -d -c '\0' | wc -c` – arrange Nov 22 '13 at 21:44
-
17@arrange: even faster: `find . -type f -printf . | wc -c` - I adopt the print for my solution instead of my -exec echo . – user unknown Nov 23 '13 at 03:41
-
1Be aware that this also counts hidden files starting with a dot. I consider this a feature rather than a bug, but it is good to know. – cgogolin Jan 17 '16 at 13:13
Use the tree command. You might need to install the tree package.
It will list all the files and folders under the given folder and list a summary at the end.
- 14,002
- 2
- 45
- 54
To count files (even files without an extension) at the root of the current directory, use:
ls -l | grep ^- | wc -l
To count files (even files without an extension) recursively from the root of the current directory, use:
ls -lR | grep ^- | wc -l
-
2
-
True. I'm more inclined to accept and use your answer as the solution. – user38537 Apr 23 '19 at 18:17
-
Actually, not counting hidden files / files in hidden directories is an useful _feature_ while working inside a subversion or git repository! – lfurini Apr 08 '20 at 13:00
-
And this is very slow on large folders because `ls -l` will sort the output. – Dr_Zaszuś Jul 12 '20 at 07:25
The fastest and easiest way, is to use tree. Its speed is limited by your output terminal, so if you pipe the result to tail -1, you'll get immediate result. You can also control to what directory level you like the results, using the -L option. For colorized output, use -C. For example:
$ tree share/some/directory/ | tail -1
558 directories, 853 files
$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files
If it's not already there, you can get it here.
find -type f -printf . | wc -c
Don't count the output lines of find, because filenames, containing 99 newlines, will count as 100 files.
- 6,447
- 3
- 34
- 63
-
5Filenames containing new lines is an incredibly rare edge case. – DisgruntledGoat Jul 22 '13 at 13:49
-
8
-
Use this command for each folder in the path
for D in *; do echo $D; find $D -type f| wc -l; done
- 464
- 5
- 5
You can use find . | wc -l
find . will list all files and folders and theire contents starting in your current folder.
wc -l counts the results of find
- 2,410
- 17
- 10
-
This solution counts also the folders, I gave the mark cause it matched my occasion that I didnt want to count them in :) – topless Apr 08 '11 at 12:12
-
find seems to be quicker than tree so I used below to count files in each directory of the current working directory (ignoring files in CWD) with allowing directories to have spaces:
ls -d */ | while read dir_line
do
echo -n "$dir_line :"
find "$dir_line" -type f | wc -l
done
- 131
- 2
- 7
-
Parsing output of `ls` is [very bad idea.](http://mywiki.wooledge.org/ParsingLs) – sourav c. Jul 21 '16 at 14:49
-
Great code, how can I arrange the output lines say in an increasing or decreasing count of files – nightcrawler Nov 19 '17 at 10:08