Count number of files within a directory in Linux?
Categories:
How to Count Files in a Linux Directory

Learn various methods to accurately count the number of files within a directory and its subdirectories in Linux, using common command-line tools.
Counting files in a Linux directory is a common task for system administrators and developers alike. Whether you need to check the size of a directory, monitor file growth, or simply get a quick overview, Linux offers several powerful command-line tools to achieve this. This article will explore different approaches, from simple file counts to more advanced methods that include hidden files or exclude directories.
Basic File Count (Excluding Directories)
The most straightforward way to count files is to list them and then count the lines. The ls command is fundamental for listing directory contents, and wc -l can count the number of lines. However, ls -l will also list directories, which we typically want to exclude when counting files.
ls -l | grep "^-" | wc -l
This command lists all items, filters for regular files (lines starting with -), and then counts them. It excludes hidden files.
grep "^-" part is crucial. In ls -l output, a hyphen (-) at the beginning of a line indicates a regular file, whereas d indicates a directory, l for a symbolic link, etc.Counting All Files (Including Hidden Files)
To get a more comprehensive count, including hidden files (those starting with a .), you need to use the -a option with ls. Combining this with grep and wc -l allows you to count all files, visible or hidden, while still excluding directories.
ls -la | grep "^-." | wc -l
This command includes hidden files (-a), filters for regular files, and counts them. Note the ^- in grep to ensure only files are counted.

Logic for counting files using ls, grep, and wc
Counting Files Recursively (Including Subdirectories)
When you need to count files not just in the current directory but also in all its subdirectories, the find command is your best friend. It's powerful for navigating the file system and applying criteria.
find . -maxdepth 1 -type f | wc -l
find . -type f | wc -l
The first command counts files only in the current directory (-maxdepth 1), while the second counts files recursively in the current directory and all subdirectories (-type f ensures only files are counted).
Here's a breakdown of the find command options:
1. Step 1
find .: Start searching from the current directory.
2. Step 2
-type f: Specifies that we are looking for regular files only. This excludes directories, symbolic links, and other file types.
3. Step 3
-maxdepth 1: (Optional) Restricts the search to the current directory only, preventing recursion into subdirectories. Omit this for a full recursive count.
4. Step 4
wc -l: Counts the number of lines, which corresponds to the number of files found by find.
For a more robust and often preferred method, especially when dealing with filenames containing spaces or special characters, you can use find with the -print0 option and xargs -0.
find . -type f -print0 | xargs -0 echo | wc -l
This method handles filenames with spaces or special characters correctly by using null-terminated strings.