Skip to content

About

Sorts a phone dump into cold storage: photos, videos and audio go to a dated, deduplicated vault (YYYY/YYYY-MM), everything else to a backup that keeps the original folders. Every copy is re-read and SHA-256 verified, nothing is ever overwritten, and verify tells you when the source is safe to wipe. macOS, Python stdlib, exiftool.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

dump-backup-sorter

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"

Se riapri il progetto dopo tanto tempo

  • Il codice sta in ~/sc_workspace/repositories/dump-backup-sorter e su GitHub (CieriS/dump-backup-sorter, privato). Serve solo macOS con just, exiftool e Python ≥ 3.12.
  • I dischi si spiegano da soli: ognuno ha nella radice un 00_README.txt con 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 con just 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) e just test (se passano, lo strumento funziona).
  • Perché le cose sono fatte così: docs/decisioni.md.

Il ciclo in breve

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.

Comandi

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.

Risalire alla fonte di un file

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.jpg
just 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.

Documentazione

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.

Installazione

Requisiti: macOS su Apple Silicon, Python ≥ 3.12, just ed exiftool.

brew install exiftool just
cd ~/sc_workspace/repositories/dump-backup-sorter && just test

A 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).

About

Sorts a phone dump into cold storage: photos, videos and audio go to a dated, deduplicated vault (YYYY/YYYY-MM), everything else to a backup that keeps the original folders. Every copy is re-read and SHA-256 verified, nothing is ever overwritten, and verify tells you when the source is safe to wipe. macOS, Python stdlib, exiftool.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages