# 🍺 [INN2] INN2 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. [INN2]: https://crates.io/crates/inn2 ## Benchmark
Command: Time:
INN2 -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
INN2 -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
INN2 -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 inn2 ``` ## Usage ```sh INN2 .git git fetch upstream ``` This command will fetch from upstream for all the .git repositories inside the current directory. Essentially, it replaces the following shell command: ```sh find -iname .git -type d -execdir git fetch upstream \; ``` To specify a `--File` argument or `-F`, if you would like to search for a file instead of a directory, use: ```sh INN2 -F astro.config.ts npx astro add astro-compress ``` Additionally, you can provide a `--Root` argument or `-R` to set the current working directory to a different folder. The default is `.`. ```sh INN2 -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 INN2 -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.