Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
How to Count Number of Files and Subdirectories inside a Given Linux Directory?
When working with Linux systems, it's essential to know how to count files and subdirectories within a given directory. Python provides several ways to accomplish this task, from using the os module to leveraging the pathlib library for more modern approaches.
Using os.walk() for Recursive Counting
The os.walk() function recursively traverses directories and provides separate counts for files and subdirectories ?
import os
def count_files_and_dirs(directory):
file_count = 0
dir_count = 0
for root, dirs, files in os.walk(directory):
file_count += len(files)
dir_count += len(dirs)
return file_count, dir_count
# Example usage
directory = "." # Current directory
files, directories = count_files_and_dirs(directory)
print(f"Files: {files}")
print(f"Directories: {directories}")
Files: 13 Directories: 5
Using os.listdir() for Non-Recursive Counting
For counting only in the current directory without subdirectories, use os.listdir() with os.path.isfile() and os.path.isdir() ?
import os
def count_current_dir(directory):
items = os.listdir(directory)
files = sum(1 for item in items if os.path.isfile(os.path.join(directory, item)))
dirs = sum(1 for item in items if os.path.isdir(os.path.join(directory, item)))
return files, dirs
# Example usage
directory = "."
files, directories = count_current_dir(directory)
print(f"Files in current directory: {files}")
print(f"Subdirectories in current directory: {directories}")
Files in current directory: 8 Subdirectories in current directory: 2
Using pathlib for Modern Approach
The pathlib module provides a more object-oriented and readable approach for file system operations ?
from pathlib import Path
def count_with_pathlib(directory):
path = Path(directory)
# Recursive counting
files = sum(1 for item in path.rglob('*') if item.is_file())
dirs = sum(1 for item in path.rglob('*') if item.is_dir())
return files, dirs
# Example usage
directory = "."
files, directories = count_with_pathlib(directory)
print(f"Total files (recursive): {files}")
print(f"Total directories (recursive): {directories}")
Total files (recursive): 13 Total directories (recursive): 5
Excluding Hidden Files
To exclude hidden files (those starting with a dot), filter them during the counting process ?
import os
def count_without_hidden(directory):
file_count = 0
dir_count = 0
for root, dirs, files in os.walk(directory):
# Filter out hidden files and directories
files = [f for f in files if not f.startswith('.')]
dirs[:] = [d for d in dirs if not d.startswith('.')]
file_count += len(files)
dir_count += len(dirs)
return file_count, dir_count
# Example usage
directory = "."
files, directories = count_without_hidden(directory)
print(f"Files (excluding hidden): {files}")
print(f"Directories (excluding hidden): {directories}")
Files (excluding hidden): 13 Directories (excluding hidden): 3
Comparison
| Method | Recursive | Modern Syntax | Best For |
|---|---|---|---|
os.walk() |
Yes | No | Complex directory traversal |
os.listdir() |
No | No | Current directory only |
pathlib |
Yes | Yes | Modern Python projects |
Conclusion
Use os.walk() for comprehensive recursive counting with full control. Use pathlib for modern, readable code in Python 3.4+. Choose os.listdir() when you only need counts from the immediate directory.
