@cle-does-things/dirgrep
v0.2.2
Published
Simple and intuitive CLI tool and MCP server to perform grep operations directory-wise.
Maintainers
Readme
dirgrep
dirgrep is a CLI tool to perform grep operations directory-wise.
Written in Go, it leverages the language built-in concurrency feature to execute grep operations concurrently on all files within a directory (even recursively!).
Install
In order to install dirgrep there are three ways:
- Using
go: if you already havego1.23+ installed in your environment, installing dirgrep is effortless
go install github.com/AstraBert/dirgrep- Using
npm:
npm install @cle-does-things/dirgrep- Downloading the executable from the releases page: you can download it directly from the GitHub repository or, if you do not want to leave your terminal, you can use
curl:
curl -L -o dirgrep https://github.com/AstraBert/dirgrep/releases/download/<version>/dirgrep_<version>_<OS>_<processor>.tar.gz ## e.g. https://github.com/AstraBert/dirgrep/releases/download/0.1.1/dirgrep_0.1.1_darwin_amd64.tar.gz
# make sure the downloaded binary is executable (not needed for Windows)
chmod +x dirgrepIn this last case, be careful to specify your OS (supported: linux, windows, macos) and your processor type (supported: amd, arm).
Usage
dirgrep [command] [flags]Commands
mcp: Start an MCP server over stdio transport
Flags
-c,--context int
Number of characters of context to include around matches. Defaults to0.-d,--directory string
Directory to search for the pattern. Defaults to the current working directory (".").-h,--help
Show the help message and exit.-p,--pattern string
Pattern to search for within the given directory. Required.-r,--recursive
Search files recursively. Defaults tofalse.-s,--skip strings
One or more sub-directories to skip. Can be specified multiple times or as comma-separated values. Defaults to an empty list.-x,--no-prettyDeactivate pretty-printing for the matches to the console.
Examples
# search for 'package main' in the current directory, excluding .git and .gitub
dirgrep --pattern 'package main' --skip .git --skip .github --recursive
# search in a specific directory non-recursively
dirgrep --pattern 'root' --directory cmd/
# add a context of 200 charachters around the match
dirgrep --pattern '202\d' --context 200
# deactivate pretty-printing
dirgrep --pattern '202\d' --context 100 --no-pretty
# start MCP server
dirgrep mcpBenchmark
Python 3.9+ is required for running the benchmark
You can run the benchmark for dirgrep (VS other tools) using:
cd benchmark
bash run.shThis will:
- Create 1 million files (approx. 4GB) under the
benchmark/filesdirectory, containing three random lines each. - Start
./dirgrepsearch for the patternA password forgot itself at dawn.(one of the random lines), redirecting the standard output tobenchmark_dirgrep.txt - Start
grepsearch recursively for the same pattern, redirecting the standard output tobenchmark_grep.txt - Start
ripgrepsearch recursively for the same pattern, redirecting the standard output tobenchmark_ripgrep.txt - Once the program is finished, you will have the time output for it.
In the latest run, dirgrep VS other tools performed as follows:
| Metric | dirgrep | grep | ripgrep | Description | |------------|-------------|-------------|-------------|--------------------------------------| | user | 35.58s | 1.53s | 2.06s | CPU time in user mode (program code) | | system | 454.60s | 27.67s | 38.44s | CPU time in system mode (kernel ops) | | cpu | 1166% | 17% | 312% | CPU utilization across all cores | | total | 42.037s | 166.34s | 12.940s | Actual elapsed wall-clock time |
Contributing
We welcome contributions! Please read our Contributing Guide to get started.
License
This project is licensed under the MIT License
