- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VhU3mN2Rvv9JtQ4mdE7gsm |
||
| .cargo | ||
| .claude | ||
| release | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE.md | ||
| README.md | ||
| rustfmt.toml | ||
wintolidat -- Windows to Linux Data Traveler
A five-option guided front end for carrying data off a Windows machine
onto a drive -- a Linux-formatted USB stick, typically -- in one run. It
wraps three already-built, already-tested command-line tools
(hyperindex, hyperfiler, outbird) instead of reimplementing any of
their pipeline logic, and asks exactly five questions:
- Source folder -- what to copy from.
- Target folder -- the stick, or a folder on it.
- File types -- Documents / Music / Video / Pictures / Other.
- Layout -- AI resorting + dupes removal (sort into folders by type/date/artist, identical files kept once) or 1:1 (keep the source folder structure exactly as it is).
- PST -> Mbox -- find every Outlook
.pstin the source and turn each into its own standalone Mbox mailbox folder.
Nothing else. No entities.toml, no genres.toml, no OCR page counts, no
model label files, no Outbird backend/profile choice, no plan_run/
--backup-confirmed/--older-than housekeeping. Those all exist in
hyperfiler-gui (obsidian/dev/hyperfiler/gui), the full-featured
front end this was cut down from -- reach for that one directly if a run
needs any of them. wintolidat exists for the much more common case that
never should have to see any of it.
Why "Data Traveler"
Named for the errand it automates: emptying a Windows machine's Documents/
Music/Video/Pictures onto a USB stick meant for a Linux machine, with PST
mail carried along as a portable Mbox tree Thunderbird (or any other Mbox
reader) can open on either OS. Nothing about it is Linux-specific --
wintolidat.exe itself only ever runs on Windows, and "target folder" can
be any drive, stick or otherwise. The name just names the one job it was
built for.
Quick start
- Copy
wintolidat.exe,hyperindex.exe,hyperfiler.exeandoutbird.exe(all four -- seerelease/) into one folder, anywhere. - Run
wintolidat.exe. - Pick the source folder, pick the target folder, tick the file types, pick a layout, leave "Find PST files" on or off, click Start.
- Watch the log. When it says done, the target folder holds everything that was asked for; the source is untouched (see "What this never does" below).
What happens behind the five choices
One background run, four stages, streamed into one log:
| Stage | Command | What it does |
|---|---|---|
| 1/4 Indexing | hyperindex.exe scan <source> --db <target>\.wintolidat\index.db |
Walks and hashes the source folder into a fresh index database, private to this run (spec: obsidian/dev/hyperindex). |
| 2/4 Planning | hyperfiler.exe plan <target> --db <index.db> [--only <classes>] [--mirror | --model] |
Decides, for every indexed file, where it would land -- nothing is copied yet. |
| 3/4 Copying | hyperfiler.exe apply <plan_run> <target> --db <index.db> |
Copies every planned file to the target and verifies its hash. Never touches or deletes a source file. |
| 4/4 PST -> Mbox | outbird.exe export <pst> --backend auto --output <target>\mboxemails\<stem> |
Once per discovered .pst, only if the toggle is on. |
The five choices map onto that table exactly:
- File types become
--only photo,music,document,video,other(only the ticked ones; all five ticked is the same as no--onlyflag at all --hyperfiler's own default already means all five with "Other" opt-in the same wayhyperfiler-guitreats it). - Layout = AI resorting + dupes removal adds
--model(the local embedding model rescues documents the rule-based classifier alone can't place; if the model isn't installed on this machine,plandegrades to rules-only, silently -- see.claude/state.md, this is never an error). Nothing here has ever been a separate dedup step: identical file content always collapses to one destination file, in both layouts, because that is howhyperfiler's own path engine resolves collisions (spec §4.5). - Layout = 1:1 adds
--mirrorinstead: no classification, no model, no OCR -- every file goes toArchive/<volume-serial>/<original path>, preserving the source tree verbatim. - PST -> Mbox queries the index this run just built for every present
.pst, and runs oneoutbird export --backend autoper file. Off simply skips stage 4/4 entirely.
What this never does
apply copies; it never moves or deletes anything at the source.
hyperfiler itself has further commands -- quarantine (relocate a
verified copy's source into a quarantine folder) and purge (permanently
delete a quarantined copy) -- that this tool deliberately never calls.
wintolidat's job is carrying data onto a fresh stick, not cleaning up the
machine it came from; reach for hyperfiler-gui directly for that.
Building from source
cargo build --release
Needs hyperindex.exe, hyperfiler.exe and outbird.exe from their own
repos (or the copies already in release/) next to the built
wintolidat.exe to actually do anything -- the GUI shows a red warning
naming whichever one it can't find. HYPERINDEX_CLI_PATH /
HYPERFILER_CLI_PATH / OUTBIRD_CLI_PATH override the lookup if they
live somewhere else.
Related repos
namshubsofenki/hyperindex-- the indexer wintolidat's stage 1/4 shells out to.namshubsofenki/hyperfiler-- the planner/copier wintolidat's stages 2/4-3/4 shell out to, and the full-featuredhyperfiler-guithis project was cut down from.namshubsofenki/outbird-- the PST converter wintolidat's stage 4/4 shells out to.
License
PolyForm Noncommercial 1.0.0 -- see LICENSE.md.