Although at first counting files and directories in Linux may not seem the most exciting topic you will be surprised just how much you can learn from these tasks. They are also well suited to those starting out in Linux with one or two elements that may be new even to seasoned Linux users. This all started from a question on my Facebook page. Even the answer can be quite simple there is more to investigate than you would at first think.
Firstly, if we want to be counting files and directories in Linux then ls may be a great option Used in conjunction with wc we can count the number of items returned. The command ls is used to list directory content and wc is used for word count, used with -l it can count lines.
$ ls | wc -l
Whilst this is good we will not show hidden files or directories. Hidden files start with a dot. To list these we can use the option -a or -A with ls. To show all files we use -a and almost all files with -A. Yes almost all, we exclude the . and .. directories which are system links.
[tux@packstack ~]$ ls dir1 dir2 dir3 dir4 [tux@packstack ~]$ ls -a . .. .bash_logout .bash_profile .bashrc dir1 dir2 dir3 dir4 [tux@packstack ~]$ ls -A .bash_logout .bash_profile .bashrc dir1 dir2 dir3 dir4 [tux@packstack ~]$
If we want to count the output we are better not count the . and .. directory.
[tux@packstack ~]$ ls -A | wc -l 7 [tux@packstack ~]$
From the output we can see that we have a total of 7 items in the current directory.
If we want to count directories and files separetely then we can use the GNU command find. To list files we can use the option -type f. Of course we could count the output as before.
[tux@packstack ~]$ find . -type f ./.bash_logout ./.bash_profile ./.bashrc
Listing directories is similar but we will see that we will include the current directory which we may not want.
[tux@packstack ~]$ find . -type d . ./dir1 ./dir2 ./dir3 ./dir4
To exclude the current directory from the count we can use the option -mindepth 1 to ensure that we start with the directories content and not the directory.[tux@packstack ~]$
find . -mindepth 1 -type d ./dir1 ./dir2 ./dir3 ./dir4
So we can see that counting files and directories in Linux is not difficult but it can be even easier. Well at least counting directories. The hard link count for a directory can be used to show how many subdirectories there are in the directory. Each subdirectory has a link back to the parent. A directory start with a hard link count of 2 so just remove 2 from the current hard link count to see how many subdirectories.
[tux@packstack ~]$ ls -ld /etc drwxr-xr-x. 112 root root 8192 Jun 8 15:03 /etc
The etc directory has 110 subdirectories on my system, 112 – 2 = 110