List All Files in a Directory Using Rust
- 2 minutes read
Rust has a very useful built-in file system module. The following code uses it to print each file in a given directory:
use std::fs;
fn main() {
for file in fs::read_dir("./change_this_path").unwrap() {
println!("{}", file.unwrap().path().display());
}
}
Recursively crawling directories
But for solutions that are a little more advanced, I recommend using a lightweight crate called walkdir.
First, you’ll need to add the following two lines to your Cargo.toml
:
[dependencies]
walkdir = "2"
Then, you’ll need to install it with the following command:
cargo install --path .
We can use walkdir to recursively crawl all the files in a directory.
In other words, we can list all the files in a directory, all the files in each subdirectory, all the files in each subdirectory’s subdirectory, and so on:
extern crate walkdir;
use walkdir::WalkDir;
fn main() {
for file in WalkDir::new("./change_this_path").into_iter().filter_map(|file| file.ok()) {
println!("{}", file.path().display());
}
}
However, folders are still included in the list.
Listing files but not folders
Here’s an example of walkdir in action with a script that has the same functionality as before, except folders are excluded:
extern crate walkdir;
use walkdir::WalkDir;
fn main() {
for file in WalkDir::new("./change_this_path").into_iter().filter_map(|file| file.ok()) {
if file.metadata().unwrap().is_file() {
println!("{}", file.path().display());
}
}
}
Counting the files in a directory
And if you just want to count the number of files in a directory, the count()
method is your friend:
use std::fs;
extern crate walkdir;
use walkdir::WalkDir;
fn main() {
// Count all files and folders in directory:
println!("{}", fs::read_dir("./change_this_path").unwrap().count());
// Recursively count all files and folders in directory and subdirectories:
println!("{}", WalkDir::new("./change_this_path").into_iter().count());
}
Conclusion
Working with files in Rust can be easy and fun, especially when using a handy crate like walkdir.
And when dealing with larger file systems, Rust’s incredible performance really starts to shine.
I hope you enjoyed these snippets! This is my first Rust tutorial on this blog, but I look forward to writing more.