How to find the largest file in a directory and its subdirectories?
Categories:
Locate the Largest Files in Your Linux/Unix Filesystem

Discover how to efficiently find the largest files within a specified directory and its subdirectories using powerful command-line tools like find, du, and sort.
Identifying large files is a common task for system administrators and developers alike. Whether you're trying to free up disk space, troubleshoot storage issues, or simply understand disk usage patterns, knowing how to pinpoint these files quickly is invaluable. This article will guide you through various command-line methods to effectively locate the largest files in any given directory, including its subdirectories, on Linux and Unix-like systems.
Understanding the Core Tools
Before diving into specific commands, let's briefly look at the primary utilities we'll be using:
find: A versatile command for searching files and directories based on various criteria (name, type, size, modification time, etc.).du(disk usage): Estimates file space usage. When combined withfind, it can report the size of individual files.sort: Sorts lines of text files or output of other commands. Essential for ordering files by size.head: Outputs the first part of files. Useful for getting the top N largest files.xargs: Builds and executes command lines from standard input. Crucial for passingfindresults toduefficiently.
flowchart TD
A[Start: Specify Directory] --> B{Use `find` to locate files}
B --> C{Pipe results to `xargs`}
C --> D{Execute `du -sh` for each file}
D --> E{Pipe `du` output to `sort -rh`}
E --> F{Pipe sorted output to `head -n N`}
F --> G[End: Display Top N Largest Files]Workflow for finding the largest files in a directory.
Method 1: Using find, du, sort, and head
This is the most common and flexible approach. It involves finding all files, calculating their disk usage, sorting them by size, and then displaying the largest ones. The -print0 and xargs -0 combination is crucial for handling filenames with spaces or special characters correctly.
find /path/to/directory -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
Finds the 10 largest files in a specified directory and its subdirectories.
Let's break down the command:
find /path/to/directory: Starts the search from the specified directory.-type f: Restricts the search to regular files only (excludes directories, symlinks, etc.).-print0: Prints the full file name on the standard output, followed by a null character. This is safer than-printfor filenames with spaces or special characters.xargs -0: Reads items from standard input, delimited by null characters, and executes thedu -hcommand for each item.du -h: Estimates disk usage of files in a human-readable format (e.g., 1K, 234M, 2G).sort -rh: Sorts the output.-rreverses the result (largest first), and-henables human-numeric sorting (understands K, M, G suffixes).head -n 10: Displays only the first 10 lines, which correspond to the 10 largest files.
/path/to/directory with . (a single dot).Method 2: Using find with -size and -exec (Less Efficient for Many Files)
While less efficient for a very large number of files due to du being executed for each file individually, this method can be useful for specific scenarios or when xargs is not available or desired. You can also use find -size to filter by size directly, though it's not ideal for sorting by exact size.
find /path/to/directory -type f -exec du -h {} + | sort -rh | head -n 10
Alternative using find -exec for finding large files.
In this variant:
find ... -exec du -h {} +: This executesdu -hon batches of files found byfind. The{}is replaced by the filenames, and+meansfindwill append all found files to a singleducommand, making it more efficient than-exec du -h {} \;which runsdufor each file individually.
Method 3: Using du -a and sort (Simpler for Current Directory)
If you're primarily interested in the current directory and its subdirectories, and don't need the full power of find's filtering capabilities, du -a can be a simpler alternative. The -a option tells du to report disk usage for all files, not just directories.
du -ah /path/to/directory | sort -rh | head -n 10
A simpler approach using du -ah to find large files.
This command is more concise but might include directory sizes in its output, which find -type f explicitly avoids. If you only want regular files, the find approach is generally preferred.
du reports disk space allocated to files, which might be slightly different from their actual size (e.g., due to block allocation). For exact file size, ls -l can be used, but it's harder to combine with sorting by size across many files.