Introduction
# fd - Fast File Finder
User-friendly alternative to `find` with smart defaults.
## Quick Start
### Basic search ```bash # Find files by name fd pattern
# Find in specific directory fd pattern /path/to/dir
# Case-insensitive fd -i pattern ```
### Common patterns ```bash # Find all Python files fd -e py
# Find multiple extensions fd -e py -e js -e ts
# Find directories only fd -t d pattern
# Find files only fd -t f pattern
# Find symlinks fd -t l ```
## Advanced Usage
### Filtering ```bash # Exclude patterns fd pattern -E "node_modules" -E "*.min.js"
# Include hidden files fd -H pattern
# Include ignored files (.gitignore) fd -I pattern
# Search all (hidden + ignored) fd -H -I pattern
# Maximum depth fd pattern -d 3 ```
### Execution ```bash # Execute command on results fd -e jpg -x convert {} {.}.png
# Parallel execution fd -e md -x wc -l
# Use with xargs fd -e log -0 | xargs -0 rm ```
### Regex patterns ```bash # Full regex search fd '^test.*\.js$'
# Match full path fd --full-path 'src/.*/test'
# Glob pattern fd -g "*.{js,ts}" ```
## Time-based filtering ```bash # Modified within last day fd --changed-within 1d
# Modified before specific date fd --changed-before 2024-01-01
# Created recently fd --changed-within 1h ```
## Size filtering ```bash # Files larger than 10MB fd --size +10m
# Files smaller than 1KB fd --size -1k
# Specific size range fd --size +100k --size -10m ```
## Output formatting ```bash # Absolute paths fd --absolute-path
# List format (like ls -l) fd --list-details
# Null separator (for xargs) fd -0 pattern
# Color always/never/auto fd --color always pattern ```
## Common Use Cases
**Find and delete old files:** ```bash fd --changed-before 30d -t f -x rm {} ```
**Find large files:** ```bash fd --size +100m --list-details ```
**Copy all PDFs to directory:** ```bash fd -e pdf -x cp {} /target/dir/ ```
**Count lines in all Python files:** ```bash fd -e py -x wc -l | awk '{sum+=$1} END {print sum}' ```
**Find broken symlinks:** ```bash fd -t l -x test -e {} \; -print ```
**Search in specific time window:** ```bash fd --changed-within 2d --changed-before 1d ```
## Integration with other tools
**With ripgrep:** ```bash fd -e js | xargs rg "pattern" ```
**With fzf (fuzzy finder):** ```bash vim $(fd -t f | fzf) ```
**With bat (cat alternative):** ```bash fd -e md | xargs bat ```
## Performance Tips
- `fd` is typically much faster than `find` - Respects `.gitignore` by default (disable with `-I`) - Uses parallel traversal automatically - Smart case: lowercase = case-insensitive, any uppercase = case-sensitive
## Tips
- Use `-t` for type filtering (f=file, d=directory, l=symlink, x=executable) - `-e` for extension is simpler than `-g "*.ext"` - `{}` in `-x` commands represents the found path - `{.}` strips the extension - `{/}` gets basename, `{//}` gets directory
## Documentation
GitHub: https://github.com/sharkdp/fd Man page: `man fd`