Smista la copia del telefono (drive di transito HOT /Volumes/SHUT01_1TB) nell'archivio a freddo
(COLD /Volumes/ARCH01_8TB), verifica che ogni file sia arrivato integro e ti dice quando puoi
svuotare il telefono.
Priorità assoluta: non perdere e non corrompere dati. La sorgente viene solo letta, ogni copia è
riletta e confrontata per SHA-256, niente viene mai sovrascritto, e nel dubbio lo strumento si ferma
invece di indovinare. Cancellare resta sempre un gesto tuo, da fare solo dopo che verify ha detto SÌ.
telefono ──(copia a mano)──► SHUT01/01_TRANSFER_ZONE/<data>/ sola lettura, sempre
│
├─② ingest ─► 01_MEDIA_VAULT/YYYY/YYYY-MM/ foto, video, audio per data
│ 01_MEDIA_VAULT/_app/<area>/… vocali, sticker, screenshot
│ 01_MEDIA_VAULT/_unsorted/ media senza data
├─① backup ─► 01_MEDIA_VAULT/_other_files/ tutto il resto, con cartelle
│ e nomi originali
└─ verify ──► "PUOI SVUOTARE LA SORGENTE: SÌ / NO"
- Il codice sta in
~/sc_workspace/repositories/dump-backup-sortere su GitHub (CieriS/dump-backup-sorter, privato). Serve solo macOS conjust,exiftoole Python ≥ 3.12. - I dischi si spiegano da soli: ognuno ha nella radice un
00_README.txtcon la mappa delle cartelle, i comandi e il modo di risalire alla fonte di un file anche senza lo strumento. Gli originali sono versionati qui, in docs/dischi/; si reinstallano conjust readme-dischi. - L'archivio si legge senza lo strumento: i media sono file normali per anno e mese, i documenti hanno le cartelle originali del telefono, i cataloghi sono SQLite e hanno export in CSV.
- Prima di tutto:
just(elenco dei comandi) ejust test(se passano, lo strumento funziona). - Perché le cose sono fatte così: docs/decisioni.md.
La procedura completa è in docs/procedura.md. Dalla cartella del progetto:
caffeinate -ims just archive /Volumes/SHUT01_1TB/01_TRANSFER_ZONE/<YYYY-MM-DD>Poi espelli e ricollega ARCH01, così la verifica rilegge dal disco e non dalla memoria, e:
caffeinate -ims just verify /Volumes/SHUT01_1TB/01_TRANSFER_ZONE/<YYYY-MM-DD>Solo se l'ultima riga dice PUOI SVUOTARE LA SORGENTE : SÌ svuoti il telefono e la cartella su SHUT01.
caffeinate -ims tiene sveglio il Mac durante le operazioni lunghe.
| Comando | Cosa fa |
|---|---|
just |
elenco di tutti i comandi |
just archive SRC |
archivia una copia del telefono: media nel vault, tutto il resto nel backup ① |
just verify SRC |
prima di svuotare: ogni file di SRC ha una copia integra? Risponde SÌ o NO |
just verify-quick SRC |
come verify ma senza rileggere le copie in archivio (circa metà del tempo; non basta per svuotare) |
just origin FILE… |
da dove viene un file, riconosciuto per contenuto anche se rinominato o copiato altrove |
just cerca TESTO |
tutti i file archiviati la cui provenienza contiene un testo, es. just cerca MoneyManager |
just scrub |
controllo periodico: ogni copia dell'archivio è ancora integra? (rilegge tutto, dura ore) |
just reorganize-dry-run / just reorganize |
riallinea i file già archiviati alle regole di smistamento attuali |
just dry-run SRC / just backup-dry-run SRC |
simulazioni: scrivono solo il log |
just ingest SRC / just backup SRC |
le due metà di archive, separate |
just readme-dischi |
reinstalla i 00_README.txt sui dischi collegati |
just test |
test automatici |
just check |
lint, tipi, test e soglia di copertura; just hooks lo lancia a ogni git push |
Dettagli, opzioni ed exit code: docs/comandi.md.
Ogni file archiviato conserva tutte le sue provenienze (il percorso sul telefono e la copia da cui è arrivato) e ogni spostamento successivo, in tre registri indipendenti: catalogo, export CSV e log.
just origin /Volumes/ARCH01_8TB/01_MEDIA_VAULT/2024/2024-03/20240315_143022_a1b2c3d4.jpgjust cerca "WhatsApp Images"Senza lo strumento basta il nome: gli 8 caratteri dopo l'ora (a1b2c3d4) sono l'inizio dello SHA-256,
e grep -h "_a1b2c3d4." 01_MEDIA_VAULT/_logs/*.log trova la riga "percorso originale → vault".
Tutto in docs/catalogo-e-provenienza.md.
| Documento | Cosa contiene |
|---|---|
| docs/procedura.md | La procedura periodica e lo stato della migrazione in corso. È l'unica versione della procedura. |
| docs/archivio.md | A cosa serve ogni cartella di ARCH01 e SHUT01, gli snapshot, come leggere l'archivio senza lo strumento. |
| docs/garanzie.md | Cosa è garantito e come, cosa non è garantito, dove finisce ogni file, cosa succede in ogni guasto. |
| docs/comandi.md | Tutti i comandi (just e CLI), opzioni, exit code, esclusioni, prova su un vault usa e getta. |
| docs/smistamento.md | Le regole per provenienza (area _app/, Money Manager nel backup ①), come cambiarle, la riorganizzazione. |
| docs/catalogo-e-provenienza.md | I cataloghi SQLite, le migrazioni, come risalire alla fonte di un file con e senza lo strumento. |
| docs/log-ed-esiti.md | Com'è fatto un log, ogni esito, ogni codice di WARNING e di FAIL, il verdetto di verify. |
| docs/date-e-nomi.md | Come si decide la data di un media, i formati di nome riconosciuti, come si chiamano i file. |
| docs/problemi.md | Messaggi di errore, cosa fare per ogni FAIL, come riparare una copia archiviata danneggiata. |
| docs/sviluppo.md | Architettura del codice, test, copertura, come aggiungere un formato di data, una regola o un'estensione. |
| docs/decisioni.md | Le decisioni di progetto con il loro perché, la cronologia delle esecuzioni reali, la roadmap. |
| docs/dischi/ | I 00_README.txt dei dischi, versionati. |
| docs/esempio_dryrun.log | Un log reale di dry-run, generato dalle fixture dei test. |
Requisiti: macOS su Apple Silicon, Python ≥ 3.12, just ed exiftool.
brew install exiftool justcd ~/sc_workspace/repositories/dump-backup-sorter && just testA runtime serve solo la libreria standard di Python. Gli strumenti di sviluppo (pytest, ruff,
mypy) servono solo a test e controlli e vengono installati in .venv al primo just test o
just check. Chi modifica il codice lancia una volta just hooks: da quel momento ogni git push
passa da just check (docs/sviluppo.md).