| Crates.io | gitclean |
| lib.rs | gitclean |
| version | 1.0.0 |
| created_at | 2025-09-02 16:42:15.711698+00 |
| updated_at | 2025-09-02 16:42:15.711698+00 |
| description | Scan and clean .gitignore-ignored files with sizes and interactive deletion |
| homepage | |
| repository | https://github.com/jordyfontoura/gitclean |
| max_upload_size | |
| id | 1821389 |
| size | 56,125 |
A fast Rust CLI to scan and clean files and directories ignored by .gitignore across your project. It detects ignored items, shows sizes, and lets you interactively delete them.
-i ".env*,.config*")Build from source:
cargo install --path .
Or build a release binary:
cargo build --release
./target/release/gitclean .
gitclean <PATH> [--ignores|-i "pattern1,pattern2,..."]
Examples:
# Current directory
gitclean .
# Custom root path
gitclean /path/to/project
# Add extra ignore patterns (comma-separated)
gitclean . -i ".env*,.config*,*.log"
Core logic is exposed as a library for reuse:
use gitclean::{gather_gitignores, scan_ignored_files, calculate_sizes, format_size};
use indicatif::ProgressBar;
use std::path::Path;
let root = Path::new(".").canonicalize().unwrap();
let spinner = ProgressBar::hidden();
let extra: Vec<String> = vec![];
let map = gather_gitignores(&root, &spinner, &extra)?;
let ignored = scan_ignored_files(&root, &map, &spinner)?;
let items = calculate_sizes(ignored, &spinner, &root)?;
println!("{} items", items.len());
src/lib.rs: public re-exportssrc/patterns.rs: default ignore patternssrc/types.rs: shared types (ItemWithSize)src/ignore.rs: .gitignore loading (gather_gitignores)src/scan.rs: scan logic (scan_ignored_files, is_path_ignored)src/size.rs: size computation (calculate_sizes)src/fsops.rs: file ops (remove_item)src/util.rs: helpers (format_size)src/main.rs: thin CLI using the library# Run tests
cargo test
# Build release
cargo build --release
Contributions are welcome! Please read CONTRIBUTING.md and follow the CODE_OF_CONDUCT.md.
MIT © 2025 Jordy Fontoura