fd File Finding Expert knowledge for using fd as a fast, user-friendly alternative to find with smart defaults and powerful filtering. Core Expertise fd Advantages Fast parallel execution (written in Rust) Colorized output by default Respects .gitignore automatically Smart case-insensitive search Simpler syntax than find Regular expression support Basic Usage Simple File Search
Find all files named config
fd config
Find files with extension
fd -e rs
All Rust files
fd -e md
All Markdown files
fd -e js -e ts
JavaScript and TypeScript
Case-sensitive search
fd -s Config
Only exact case match
Pattern Matching
Regex patterns
fd '^test_.*.py$'
Python test files
fd '.config$'
Files ending in .config
fd '^[A-Z]'
Files starting with uppercase
Glob patterns
fd '*.lua'
All Lua files
fd 'test-*.js'
test-*.js files
Advanced Filtering Type Filtering
Search only files
fd -t f pattern
Files only
fd -t d pattern
Directories only
fd -t l pattern
Symlinks only
fd -t x pattern
Executable files
Multiple types
fd -t f -t l pattern
Files and symlinks
Depth Control
Limit search depth
fd -d 1 pattern
Only current directory
fd -d 3 pattern
Max 3 levels deep
fd --max-depth 2 pattern
Alternative syntax
Minimum depth
fd --min-depth 2 pattern
Skip current directory
Hidden and Ignored Files
Include hidden files
fd -H pattern
Include hidden files (starting with .)
Include ignored files
fd -I pattern
Include .gitignore'd files
fd -u pattern
Unrestricted: hidden + ignored
Show all files
fd -H -I pattern
Show everything
Size Filtering
File size filters
fd --size +10m
Files larger than 10 MB
fd --size -1k
Files smaller than 1 KB
fd --size +100k --size -10m
Between 100 KB and 10 MB
Modification Time
Files modified recently
fd --changed-within 1d
Last 24 hours
fd --changed-within 2w
Last 2 weeks
fd --changed-within 3m
Last 3 months
Files modified before
fd --changed-before 1y
Older than 1 year
Execution and Processing Execute Commands
Execute command for each result
fd -e jpg -x convert { } { . } .png
Convert all JPG to PNG
Parallel execution
fd -e rs -x rustfmt
Format all Rust files
Execute with multiple results
fd -e md -X wc -l
Word count on all Markdown files
Output Formatting
Custom output format using placeholders
fd -e tf --format '{//}'
Parent directory of each file
fd -e rs --format '{/}'
Filename without directory
fd -e md --format '{.}'
Path without extension
Placeholders:
{} - Full path (default)
{/} - Basename (filename only)
{//} - Parent directory
{.} - Path without extension
{/.} - Basename without extension
Integration with Other Tools
Prefer fd's native execution over xargs when possible:
fd -e log -x rm
Delete all log files (native)
fd -e rs -X wc -l
Count lines in Rust files (batch)
Use with rg for powerful search
fd -e py -x rg "import numpy" { }
Find numpy imports in Python files
Open files in editor
fd -e md -X nvim
Open all Markdown in Neovim (batch)
When xargs IS useful: complex pipelines or non-fd inputs
cat filelist.txt | xargs rg "TODO"
Process file from external list
Common Patterns Development Workflows
Find test files
fd -e test.js -e spec.js
JavaScript tests
fd '^test_.*.py$'
Python tests
fd '_test.go$'
Go tests
Find configuration files
fd -g '*.config.js'
Config files
fd -g '.env*'
Environment files
fd -g '*rc' -H
RC files (include hidden)
Find source files
fd -e rs -e toml -t f
Rust project files
fd -e py --exclude pycache
Python excluding cache
fd -e ts -e tsx src/
TypeScript in src/
Cleanup Operations
Find and remove
fd -e pyc -x rm
Remove Python bytecode
fd node_modules -t d -x rm -rf
Remove node_modules
fd -g '*.log' --changed-before 30d -X rm
Remove old logs
Find large files
fd --size +100m -t f
Files over 100 MB
fd --size +1g -t f -x du -h
Size of files over 1 GB
Path-Based Search
Search in specific directories
fd pattern src/
Only in src/
fd pattern src/ tests/
Multiple directories
Exclude paths
fd -e rs -E target/
Exclude target directory
fd -e js -E node_modules -E dist
Exclude multiple paths
Full path matching
fd -p src/components/.* \ .tsx$
Match full path
Find Directories Containing Specific Files
Find all directories with Terraform configs
fd -t f 'main.tf$' --format '{//}'
Find all directories with package.json
fd -t f '^package.json$' --format '{//}'
Find Go module directories
fd -t f '^go.mod$' --format '{//}'
Find Python project roots (with pyproject.toml)
fd -t f '^pyproject.toml$' --format '{//}'
Find Cargo.toml directories (Rust projects)
fd -t f '^Cargo.toml$' --format '{//}' Note: Use --format '{//}' instead of piping to xargs - it's faster and simpler. Best Practices When to Use fd Finding files by name or pattern Searching with gitignore awareness Fast directory traversal Type-specific searches Time-based file queries When to Use find Instead Complex boolean logic POSIX compatibility required Advanced permission checks Non-standard file attributes Performance Tips Use -j 1 for sequential search if order matters Combine with --max-depth to limit scope Use -t f to skip directory processing Leverage gitignore for faster searches in repos Integration with rg
Prefer native execution over xargs
fd -e py -x rg "class.*Test" { }
Find test classes in Python
fd -e rs -x rg "TODO" { }
Find TODOs in Rust files
fd -e md -x rg "# " { }
Find headers in Markdown
Use fd's Built-in Execution
fd can execute directly — no need for xargs
fd -t f 'main.tf$' --format '{//}'
Find dirs containing main.tf
fd -e log -x rm
Delete all .log files
Quick Reference Essential Options Option Purpose Example -e EXT Filter by extension fd -e rs -t TYPE Filter by type (f/d/l/x) fd -t d -d DEPTH Max search depth fd -d 3 -H Include hidden files fd -H .env -I Include ignored files fd -I build -u Unrestricted (no ignore) fd -u pattern -E PATH Exclude path fd -E node_modules -x CMD Execute command fd -e log -x rm -X CMD Batch execute fd -e md -X cat -s Case-sensitive fd -s Config -g GLOB Glob pattern fd -g '*.json' --format FMT Custom output format fd -e tf --format '{//}' Time Units s = seconds m = minutes h = hours d = days w = weeks y = years Size Units b = bytes k = kilobytes m = megabytes g = gigabytes t = terabytes Common Command Patterns
Find recently modified source files
fd -e rs --changed-within 1d
Find large files in current directory
fd -d 1 -t f --size +10m
Find executable scripts
fd -t x -e sh
Find config files including hidden
fd -H -g 'config'
Find and count lines
fd -e py -X wc -l
Find files excluding build artifacts
fd -e js -E dist -E node_modules -E build
Find all Terraform/IaC project directories
fd -t f 'main.tf$' --format '{//}'
Find all Node.js project roots
fd -t f '^package.json$' --format '{//}' This makes fd the preferred tool for fast, intuitive file finding in development workflows.