A command-line tool for safely cleaning files and directories in your project.
By default, it runs in dry-run mode: it only shows what would be deleted. Add --delete to actually remove files.
- Beautiful output powered by rich
- Flexible cleanup rules with
--dirs,--files,--globs - Built-in presets for popular stacks: Python, Node, Rust, Go, Java, and more
- Custom presets from
pyproject.tomlorcleanerconfig.toml - Dedicated subcommands for cleanup and preset management
Commands:
cleaner clean ...
cleaner presets list
cleaner presets export <name>
Requires Python ≥ 3.12.
pipx install cli-cleanerOr:
pip install cli-cleanerDry run:
cleaner clean -d __pycache__ -d .pytest_cache -g "build/**" -f "notes.temp.txt"Real deletion:
cleaner clean -d __pycache__ -d .pytest_cache -g "build/**" -f "notes.temp.txt" --deleteExamples:
cleaner clean -g "**/*.pyc" -d __pycache__
cleaner clean -g "build/**" -g "dist/**" --delete
cleaner clean -f stray.log -f notes.temp.txt --ignore-dirs ".venv" --ignore-files stray.log --deleteMain cleanup command.
cleaner clean [OPTIONS]Supported options:
--dirs,-d— directory names to delete--files,-f— file names to delete--globs,-g— glob patterns to delete--ignore-dirs,-id— directories to ignore--ignore-files,-if— files to ignore--root,-r— root directory for cleanup--use,-u— preset name--config— explicit path to a TOML config file with presets--delete— actually delete files instead of dry-run
Examples:
cleaner clean --use python
cleaner clean --use python --delete
cleaner clean -g "*.log" -d build --deleteShow all available presets, including built-in ones and presets loaded from config files.
cleaner presets listWith custom config:
cleaner presets list --config "./ops/cleanerconfig.toml"Export a preset into a separate TOML file named {preset_name}_exported.toml.
cleaner presets export pythonWith custom config:
cleaner presets export frontend --config "./ops/cleanerconfig.toml"List all presets:
cleaner presets listExport a preset:
cleaner presets export pythonUse a preset:
cleaner clean --use python
cleaner clean --use python --delete
cleaner clean --use node -g "*.log" --ignore-dirs ".vscode" --deleteBuilt-in presets are stored in src/cli_cleaner/presets.toml.
Available out of the box:
python—__pycache__,.pytest_cache,.mypy_cache,.ruff_cache,.tox,.nox,.hypothesis,htmlcov,build,dist,.pytype,.pyre,*.pyc,*.pyo,*$py.class,**/*.egg-info/**,.coverage.*,pytest-*.xml,pytest-*.lognode—node_modules,.parcel-cache,.next,.nuxt,.svelte-kit,.vite,.turbo,.cache,coverage,dist,build,out,*.log,*.tsbuildinforust—target,coveragego—bin,build,dist,coverage,coverage.outjava—target,build,out,.gradle,.idea/modules, compiled.class,.jar,.war,.earartifactsdotnet—bin,obj,.vs,TestResults,artifacts,coveragephp—vendor,var/cache,var/log,storage/framework/cache,bootstrap/cache,coverage,build,dist,*.logruby—vendor/bundle,.bundle,coverage,tmp,pkg,log/*.logswift—DerivedData,.build,.swiftpm,build, Xcode user dataandroid—build,.gradle,app/build,.cxx,captures,coveragelatex— common intermediate files like*.aux,*.bbl,*.log,*.toc,*.out,*.synctex.gzhaskell—dist,dist-newstyle,.stack-work,coverageelixir—_build,deps,coveransible—*.retryc_cpp—build,bin,obj,.cache,CMakeFiles,Debug,Release,x64,x86, common binary/object artifactsunity—Library,Temp,Build,Logs,Objunreal—Binaries,DerivedDataCache,Intermediate,Saved/Logsos—.DS_Store,Thumbs.db,desktop.ini
Many presets also include default ignored directories such as .git, .hg, .svn, .idea, .vscode, venv, and .venv.
CLI Cleaner searches upward from the current working directory for:
pyproject.tomlcleanerconfig.toml
Preset merge order from lowest to highest priority:
- Built-in presets
pyproject.tomlcleanerconfig.toml- File passed explicitly via
--config
If the same preset name appears multiple times, the last source wins.
[tool.cleaner.presets.my_python]
dirs = ["__pycache__", ".pytest_cache", "build", "dist"]
files = [".coverage", "coverage.xml"]
globs = ["**/*.pyc", "**/*.pyo", "**/*.egg-info/**"]
ignored_dirs = [".git", ".idea", ".vscode", ".venv"]
ignored_files = [][tool.cleaner.presets.frontend]
dirs = ["node_modules", ".next", ".turbo", "dist", "build"]
files = [".eslintcache"]
globs = ["*.log", "*.tsbuildinfo"]
ignored_dirs = [".git", ".idea", ".vscode"]
ignored_files = []cleaner clean --use frontend --config "./ops/cleanerconfig.toml"You can also use the same config file for preset inspection and export:
cleaner presets list --config "./ops/cleanerconfig.toml"
cleaner presets export frontend --config "./ops/cleanerconfig.toml"- Default mode is dry-run
- Add
--deleteto actually remove files cleaner cleanwithout arguments shows command help- To run cleanup, provide at least one selector:
--dirs--files--globs- or use a preset with
--use
- Manual CLI flags override preset values
- Many presets include ignored directories for safety, such as
.git,.idea,.vscode,venv,.venv
cleaner clean --use python
cleaner clean --use python --delete
cleaner clean --use node -g "*.log" --delete
cleaner clean -g "build/**" -g "*.temp.*" --ignore-dirs ".venv" --delete
cleaner clean --use frontend --delete
cleaner presets list --config "./ops/cleanerconfig.toml"
cleaner presets export python