# 🍺 [Inn]
Inn is a command-line tool designed to execute a specified command in all
directories that match a certain pattern within a given root directory. It
provides flexibility and efficiency in running commands across multiple
directories with customizable patterns.
[Inn]: https://crates.io/crates/innkeeper
## Benchmark
Command: |
Time: |
Inn -P .git ls
|
real 0m9.441s
user 0m0.030s
sys 0m0.046s
|
find -iname .git -type d -execdir ls \;
|
real 0m14.293s +5s
user 0m4.645s +4s
sys 0m8.937s +8s
|
Inn -P .git git status
|
real 0m24.146s
user 0m0.030s
sys 0m0.062s
|
find -iname .git -type d -execdir ls \;
|
real 0m28.584s +4s
user 0m4.695s +4s
sys 0m8.354s +8s
|
Inn -P .git 'git add . && git commit -m "squash!" && git sync'
|
real 0m33.813s
user 0m0.015s
sys 0m0.060s
|
find -iname .git -type d -execdir \
bash -c 'git add . && git commit -m "squash!" && git sync' \;
|
real 0m53.122s +20s
user 0m9.449s +9s
sys 0m14.442s +14s
|
## Installation
```sh
cargo install innkeeper
```
## Usage
```sh
Inn .git git fetch upstream
```
This command will fetch from `upstream` for all the `.git` repositories inside
the current directory. Basically, it replaces the following command:
```sh
find -iname .git -type d -execdir git fetch upstream \;
```
You can hide the command output by specifying an `-H` or `--Hide` parameter:
```sh
Inn -H -F package.json ncu -u
```
To specify a `--File` argument or `-F`, if you would like to search for a file
instead of a directory, use:
```sh
Inn -F astro.config.ts npx astro add @playform/compress
```
Additionally, you can provide a `--Root` argument or `-R` to set the current
working directory to a different folder. The default is `.`.
```sh
Inn -R D:\Developer .git git fetch upstream
```
Specify a `--Parallel` argument or `-P` if you would like to run commands in
parallel. The default is sequential.
```sh
Inn -P -R D:\Developer .git git fetch upstream
```
## Dependencies
The code imports several crates:
- `clap` - For parsing command-line arguments.
- `tokio` - Enables parallel execution of tasks.
- `walkdir` - Facilitates filesystem traversal.
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for a history of changes to this CLI.