A powerful disk usage analyzer with iCloud support
Project description
reclaimed 🌟
A powerful and user-friendly command-line tool for analyzing disk usage, with special handling for iCloud storage on macOS. Quickly find your largest files and directories with a beautiful, color-coded interface, and manage them with an interactive terminal UI.
Features
- 🚀 Fast recursive directory scanning, legitimately performant and doesn't look too choppy as it batches progress updates super efficiently
- I basically kept timing identical runs and adjusting until I found the exact point of re-painting frequency that did not slow results by >5ms total.
- Separate thread for the clock so it can hum along in real time 😂
- ☁️ Smart detection & handling of iCloud Drive symlink files vs local storage which is nice on the macbook
- 📊 Beautiful UI (uses Textualize/rich and Textualize/textual libraries)
- Textual is dope, you can change the colors and everything - the mouse even works somehow but you can (and I do) drive this keyboard only
- Real ones who appreciate solarized dark for the masterpiece that it is can leave it on default
- 🖥️ Interactive terminal UI for browsing and managing files/directories and a worse noninteractive mode that's not worth using unless you're purging files on a headless rpi that's barely hanging on
- 🗑️ Delete large files and directories directly from the interface (and yes, there's a safety confirmation first)
- 💾 Export results to JSON for further analysis or batch operations
- ⚡️ Real-time progress indication
- 🛡️ Graceful handling of permission issues
https://github.com/user-attachments/assets/1aae04e7-3201-414d-a1e3-6ea5d55bd691
Installation
Prerequisites
- Python 3.8 or higher
- pip (Python package installer)
- Technically not a venv but if you aren't using a venv you're generally doing python wrong
Using pip (preferred)
pip install reclaimed
Using Homebrew (macOS)
brew install taylorwilsdon/tap/reclaimed
From Source
git clone https://github.com/taylorwilsdon/reclaimed.git
cd reclaimed
pip install -e .
For development:
pip install -r requirements.txt
Usage
Basic usage:
reclaimed ~/Documents
Advanced options:
# Show more results
reclaimed ~/Documents --files 20 --dirs 15
# Save results to JSON
reclaimed ~/Documents --output results.json
Options
PATH: Directory to scan (default: current directory)-f, --files N: Number of largest files to show (default: 10)-d, --dirs N: Number of largest directories to show (default: 10)-o, --output FILE: Save results to JSON file-i, --interactive: Launch the interactive Textual UI
Output
CLI Mode
The tool provides:
- A real-time progress indicator showing files scanned and total size
- Two tables showing the largest files and directories
- Clear indication of iCloud vs local storage
- Summary of any access issues encountered
Interactive Mode
The interactive UI provides:
- Tabbed interface to switch between files and directories views
- Keyboard navigation (arrow keys) to browse through items
- Ability to sort items by size, name, or path
- File/directory deletion with confirmation dialog
- Refresh capability to update the scan results
Development
This project uses UV for building and publishing, and Hatch for development workflow management.
Setup Development Environment
pip install -r requirements.txt
hatch shell
Common Commands
# Run tests
hatch run test
# Run tests with coverage
hatch run test-cov
# Run linting (black, ruff, mypy)
hatch run lint
# Build distribution packages
uv build --sdist --wheel
# Publish to PyPI
uv publish
# Run with interactive UI
python -m reclaimed /path/to/scan
Interactive Mode
The interactive mode launches automatically, or with the -i or --interactive flag:
reclaim ~/Documents -i
Non-interactive mode can be enabled (prints a simpler output with very low overhead) with --no-interactive
reclaim ~/Documents --no-interactive
Keyboard Shortcuts
| Key | Action |
|---|---|
| F | Switch to Files view |
| D | Switch to Directories view |
| S | Sort items |
| R | Refresh scan |
| Delete | Delete selected item |
| ? | Show help |
| Q | Quit application |
| Arrow keys | Navigate through items |
Features
- Tabbed Interface: Toggle between Files and Directories views
- Sorting: Sort items by size (default), name, or path
- File Management: Delete files and directories with confirmation
- Solarized Dark Theme: Easy on the eyes for extended use
Contributing
Contributions are welcome! Please see our Contributing Guide for details.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reclaimed-0.2.3.tar.gz.
File metadata
- Download URL: reclaimed-0.2.3.tar.gz
- Upload date:
- Size: 38.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
728fe410c3121c85e712723ed8d65785cb6a95d3cd0d13f2aafbc36ba8250c97
|
|
| MD5 |
2d6d4660ba8cd28e944b806663692edf
|
|
| BLAKE2b-256 |
ac6c7d047295bcf19cc2c1d4145765edfe5f2bac1db5b3a7d697bb1a13f258f5
|
File details
Details for the file reclaimed-0.2.3-py3-none-any.whl.
File metadata
- Download URL: reclaimed-0.2.3-py3-none-any.whl
- Upload date:
- Size: 42.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc017f6def2017b985172e51130ed1ec56ed5e0494ca82d71d5f8ac5c25421b3
|
|
| MD5 |
47f31e4d4d4eefc29b012440fd405123
|
|
| BLAKE2b-256 |
ea31b53306266fe79c4cda3222b7288a55453aefcb284aee737ded96c73db21e
|