Catho is a command-line file catalog manager inspired by Robert Vasicek's Cathy project. It allows you to index and search files across different media, volumes, and network locations without having physical access to them.
- Index files from any directory, including external drives and network shares
- Search catalogs locally without needing access to the original media
- SHA-256 hashing for duplicate file detection
- SQLite storage for fast, portable catalog databases
- Pattern matching with wildcards and regex support
- Web UI for browsing catalogs (optional feature)
- Export to JSON for integration with other tools
cargo install cathocargo install catho --features webgit clone https://github.com/iemejia/catho.git
cd catho
cargo build --release
# Or with web UI:
cargo build --release --features webThe binary will be at target/release/catho.
# Index a directory with a catalog name
catho add my-usb-drive /media/usb-drive
# Index without calculating file hashes (faster)
catho add my-backup /backup/folder -H none# List all catalogs
catho ls
# Show details for a specific catalog
catho ls my-usb-drive# Search for files matching a pattern (supports * wildcard)
catho find "*.mp3"
# Search in specific catalogs
catho find "report*.pdf" my-usb-drive my-backup
# Search using regex
catho find --regex "photo_[0-9]{4}\.jpg"# Update an existing catalog (adds new files, removes deleted ones)
catho add my-usb-drive /media/usb-drive --continuecatho rm my-old-catalog# Check if a file exists in any catalog (by hash)
catho scan /path/to/file.txt
# Scan an entire directory
catho scan /path/to/folder# Export to stdout (JSON)
catho export my-catalog
# Export to file
catho export my-catalog -o catalog.json# Start web server on default port 8080
catho web
# Use custom port and host
catho web -p 3000 --host 0.0.0.0Then open http://localhost:8080 in your browser.
Catalogs are stored as SQLite databases in a platform-specific config directory:
- Linux:
~/.config/catho/catalogs/ - macOS:
~/Library/Application Support/catho/catalogs/ - Windows:
C:\Users\<User>\AppData\Roaming\catho\catalogs\
Each catalog contains:
- File names and paths (relative to the indexed root)
- File sizes and modification dates
- SHA-256 hashes (optional) for duplicate detection
cargo test -- --test-threads=1# Debug build
cargo build
# Release build
cargo build --release
# With web feature
cargo build --release --features webcargo clippy
cargo fmt --checkContributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass and linting is clean
- Submit a pull request
This project is licensed under the GNU Lesser General Public License v3.0 - see the LICENSE file for details.