https://github.com/playform/run
Run 🍺
https://github.com/playform/run
Last synced: about 1 year ago
JSON representation
Run 🍺
- Host: GitHub
- URL: https://github.com/playform/run
- Owner: PlayForm
- License: cc0-1.0
- Created: 2024-04-06T10:12:56.000Z (about 2 years ago)
- Default Branch: Current
- Last Pushed: 2025-04-17T00:54:08.000Z (about 1 year ago)
- Last Synced: 2025-04-17T13:56:01.782Z (about 1 year ago)
- Language: Rust
- Homepage: https://GitHub.Com/PlayForm/Run
- Size: 154 MB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# [Run] 🍺
`Run` is a command-line tool that executes commands in multiple directories
concurrently.
[Run]: HTTPS://crates.io/crates/prun
## Bench
Command:
Time:
find -iname .git -execdir ls \;
real 0m17.340s
user 0m6.214s
sys 0m9.138s
Run -P .git -C 'ls'
real 0m8.480s
user 0m0.046s
sys 0m0.046s
find -iname .git -execdir git status \;
real 1m19.070s
user 0m5.385s
sys 0m7.357s
Run -P .git -C 'git status'
real 0m26.170s
user 0m0.030s
sys 0m0.046s
## Installation 🚀
```sh
cargo install prun
```
## 🛠️ Usage
`Run` can be used with various options:
```sh
Run 🍺
Usage: Run [OPTIONS] --Command
Arguments:
Pattern 🔍 [default: .]
Options:
-F, --File File 📝
-P, --Parallel Parallel ⏩
-R, --Root Root 📂 [default: .]
-E, --Exclude Exclude 🚫 [default: "node_modules .git target dist vendor"]
-C, --Command Command 🖥️
-h, --help Print help
-V, --version Print version
```
```sh
Run .git -C 'git fetch upstream'
```
This command will fetch from upstream for all `.git` repositories inside the
current directory. It essentially replaces the following command:
```sh
find -iname .git -type d -execdir git fetch upstream \;
```
## Options
#### --Command or -C:
The command to execute:
```sh
Run .git -C 'git status'
```
or multiple commands:
```sh
Run .git -C 'git status' -C 'git add .' -C 'git commit'
```
#### --File or -F:
Limit execution to files matching a certain pattern:
```sh
Run -F astro.config.ts -C 'npx astro add @playform/compress'
```
#### --Root or -R:
Set the current working directory to a different folder (default is `.`):
```sh
Run -R D:\Developer .git -C 'git fetch upstream'
```
#### --Parallel or -P:
Run commands in `parallel` (default is `sequential`):
```sh
Run -P -R D:\Developer .git -C 'git fetch upstream'
```
#### --Exclude:
Exclude certain files or directories (defailt is
`node_modules .git target dist vendor`)
#### --Pattern:
Specify a custom pattern for matching
## Dependencies
`Run` relies on several Rust crates to provide its functionality:
- [`clap`](https://crates.io/crates/clap) (v4.5.17) - A powerful and flexible
command-line argument parser. The "derive" feature is used to simplify the
creation of command-line interfaces through derive macros.
- [`walkdir`](https://crates.io/crates/walkdir) (v2.5.0) - Provides an efficient
and cross-platform way to recursively traverse directories. This is useful for
filesystem operations and searching.
- [`futures`](https://crates.io/crates/futures) (v0.3.30) - Offers abstractions
for asynchronous programming in Rust. It's used in conjunction with tokio to
handle asynchronous operations effectively.
- [`rayon`](https://crates.io/crates/rayon) (v1.10.0) - Enables easy parallelism
for data-parallel tasks. It's used to parallelize CPU-bound operations,
improving performance on multi-core systems.
- [`tokio`](https://crates.io/crates/tokio) (v1.40.0) - An asynchronous runtime
for Rust, providing essential building blocks for writing reliable
asynchronous applications. The "full" feature set is used to enable all tokio
functionality.
- [`num_cpus`](https://crates.io/crates/num_cpus) (v1.16.0) - A small crate that
determines the number of CPUs on the current system. This is useful for
optimizing parallel workloads.
- [`once_cell`](https://crates.io/crates/once_cell) (v1.19.0) - Provides a way
to perform lazy static initialization. It's often used for global variables or
singletons that need to be initialized only once.
These dependencies work together to provide a robust, efficient, and
user-friendly command-line tool capable of handling parallel and asynchronous
operations while efficiently traversing filesystems.
[Run]: HTTPS://crates.io/crates/prun
## Changelog
See [`CHANGELOG.md`](CHANGELOG.md) for a history of changes to this CLI.