A command-line utility for recursively searching and listing files with advanced filtering capabilities. Built in Rust.
-
Advanced Search
- Regex, plain text, and whole-word matching
- Recursive directory traversal
- Binary file detection
- Extension filtering
- Size limits
-
File Listing
- Detailed/simple output formats
- Extension statistics
- Size filtering
- Hidden file handling
-
Utilities
- Clipboard copy support
- Dry-run mode
- Logging to file
- Progress indicators
Assuming you have Rust installed, run:
cargo install rfgrep
cargo install --git https://github.com/kh3rld/rfgrep.git
git clone https://github.com/kh3rld/rfgrep.git
cargo build --release
After installing rfgrep, you can install the comprehensive man pages:
cd man
sudo make install
cd man
make install-user
Then add to your shell profile (.bashrc
, .zshrc
, etc.):
export MANPATH=$MANPATH:$HOME/.local/share/man
rfgrep supports tab completion for all major shells:
# Generate and source completion
rfgrep completions bash >> ~/.bashrc
source ~/.bashrc
# Generate completion file
rfgrep completions zsh > ~/.zsh/completions/_rfgrep
# Add to .zshrc
echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc
autoload -U compinit && compinit
# Generate and install
rfgrep completions fish --install --user
# Generate and import
rfgrep completions powershell > rfgrep-completion.ps1
. rfgrep-completion.ps1
rfgrep search "pattern"
rfgrep search "pattern" \
--mode regex \
--extensions rs,toml \
--max-size 5 \
--skip-binary \
--copy
# Simple list
rfgrep list
# Detailed view
rfgrep list --long --recursive
# With filters
rfgrep list --extensions rs,toml --max-size 10 --show-hidden
See DESIGN_OPTIMIZATION.md for the latest simulation findings and the optimized framework proposal, including cross-disciplinary applications and roadmap.
Quickly run built-in simulations and write a CSV report to ./results/simulations.csv:
rfgrep simulate
You can change the working directory with --path to select a corpus (defaults to . and prefers ./bench_data if present).
After installation, comprehensive man pages are available:
# Main man page
man rfgrep
# Command-specific man pages
man rfgrep-search
man rfgrep-interactive
man rfgrep-list
man rfgrep-completions
The man pages include:
- Complete command reference
- Detailed option descriptions
- Practical examples
- Performance tips
- Troubleshooting guides
Once installed, tab completion provides:
- Command completion (
rfgrep <TAB>
) - Option completion (
rfgrep search --<TAB>
) - Extension completion (
--extensions <TAB>
) - File path completion (
src/<TAB>
)
# Check if man pages are installed
ls ~/.local/share/man/man1/rfgrep*
# Add to shell profile if needed
echo 'export MANPATH=$MANPATH:$HOME/.local/share/man' >> ~/.bashrc
# Regenerate completions
rfgrep completions bash > ~/.bash_completion.d/rfgrep
# Reload shell configuration
source ~/.bashrc
# For zsh, ensure completion directory exists
mkdir -p ~/.zsh/completions
rfgrep completions zsh > ~/.zsh/completions/_rfgrep
# For fish, install to user directory
rfgrep completions fish --install --user
# Use dry-run to preview
rfgrep search "pattern" --dry-run
# Skip binary files
rfgrep search "pattern" --skip-binary
# Limit file size
rfgrep search "pattern" --max-size 10
# Use specific extensions
rfgrep search "pattern" --extensions rs,py,js
Bash:
# Check if completion is loaded
complete -p | grep rfgrep
# Manual installation
rfgrep completions bash >> ~/.bashrc
source ~/.bashrc
Zsh:
# Check completion directory
ls ~/.zsh/completions/_rfgrep
# Reload completions
autoload -U compinit && compinit
Fish:
# Check if completion is installed
ls ~/.config/fish/completions/rfgrep.fish
# Manual installation
rfgrep completions fish > ~/.config/fish/completions/rfgrep.fish
Option | Description |
---|---|
--log PATH |
Write logs to specified file |
--path DIR |
Base directory (default: . ) |
Option | Description |
---|---|
--mode MODE |
Search mode: regex/text/word |
--extensions EXT |
Comma-separated file extensions |
--max-size MB |
Skip files larger than specified MB |
--skip-binary |
Skip binary files |
--dry-run |
Preview files without processing |
--copy |
Copy results to clipboard |
--safety-policy |
Safety policy: default/conservative/performance |
--threads N |
Number of threads for parallel processing |
--file-types |
File type strategy: default/comprehensive/conservative/performance |
--include-extensions |
Override to include specific file types |
--exclude-extensions |
Override to exclude specific file types |
--search-all-files |
Search all file types (comprehensive mode) |
--text-only |
Only search text files (conservative mode) |
Option | Description |
---|---|
--extensions EXT |
Comma-separated file extensions |
--long |
Detailed output format |
--recursive |
Recursive directory traversal |
--show-hidden |
Include hidden files/directories |
--max-size MB |
Skip files larger than specified MB |
--skip-binary |
Skip binary files |
- Find all Rust files containing "HashMap":
rfgrep search "HashMap" --extensions rs
- List all Markdown files under 1MB:
rfgrep list --extensions md --max-size 1
- Search with regex and copy to clipboard:
rfgrep search "fn\s+\w+\s*\(" --mode regex --copy
# Advanced file type control
rfgrep search "pattern" --file-types comprehensive --include-extensions pdf,docx
rfgrep search "pattern" --text-only --safety-policy conservative
rfgrep search "pattern" --threads 4 --safety-policy performance
# Simulation and benchmarking
rfgrep simulate
- Use
--skip-binary
to avoid unnecessary file checks - Limit scope with
--extensions
and--max-size
- For large directories,
--dry-run
first to preview - Use
--safety-policy performance
for faster processing - Adjust
--threads
based on your CPU cores - Use
--file-types conservative
for safe text-only search
# Start interactive search
rfgrep interactive "pattern"
# Interactive search with specific algorithm
rfgrep interactive "pattern" --algorithm boyer-moore
# Interactive search in specific file types
rfgrep interactive "pattern" --extensions rs,py
# JSON output for programmatic processing
rfgrep search "pattern" --output-format json
# XML output for structured data
rfgrep search "pattern" --output-format xml
# HTML output for web display
rfgrep search "pattern" --output-format html
# Markdown output for documentation
rfgrep search "pattern" --output-format markdown
# Boyer-Moore (fast for plain text)
rfgrep search "pattern" --algorithm boyer-moore
# Regular expression
rfgrep search "pattern" --algorithm regex
# Simple linear search
rfgrep search "pattern" --algorithm simple
# Verify man pages are accessible
man rfgrep
man rfgrep-search
man rfgrep-interactive
man rfgrep-list
man rfgrep-completions
# Bash: Type 'rfgrep ' and press TAB
rfgrep <TAB>
# Zsh: Type 'rfgrep ' and press TAB
rfgrep <TAB>
# Fish: Type 'rfgrep ' and press TAB
rfgrep <TAB>
# Test search functionality
rfgrep search "test" --extensions rs
# Test list functionality
rfgrep list --extensions rs
# Test interactive mode
rfgrep interactive "test" --extensions rs
Note: the --copy
option attempts to use the system clipboard and may fail in headless CI environments (X11/Wayland not available). In those environments run without --copy
or provide a virtual display (Xvfb) or configure your CI to provide a clipboard service. The application will log a warning if the clipboard operation times out.
# Test shell completions
./test_completions.sh
# Test man pages
./test_man_pages.sh
Contributions are welcome! Please open an issue or PR for any:
- Bug reports
- Feature requests
- Performance improvements