La riga di comando exporter
Esegua le sue esportazioni da Terminale, cron, strumenti di backup e agenti.
exporter è l’app Exporter per Mac eseguita senza finestra. Usa le stesse connessioni, cartelle di esportazione, selezione e impostazioni configurate nell’app, e scrive nello stesso registro delle esportazioni. Funziona anche con l’app chiusa e non chiede mai nulla: qualsiasi cosa manchi interrompe l’esecuzione con codice di uscita 2 e una riga che dice cosa fare. Solo macOS.
Installazione
- Installi Exporter dal Mac App Store (download) e lo apra.
- Colleghi un’app (Apple Notes, Bear, Logseq, Contatti, Messaggi o Tempo di utilizzo) o una cartella di Documenti, e scelga la sua cartella di esportazione (per iniziare). Questi permessi si possono concedere solo nell’app.
- Sulla scheda Riga di comando dell’app, prema “copia il comando di installazione” e lo incolli una volta nel Terminale.
L’app è in sandbox e non può scrivere nel suo PATH, ed è per questo che l’ultimo passaggio è un incolla. La riga installa exporter in /opt/homebrew/bin quando quella cartella esiste e le appartiene (senza sudo), altrimenti in /usr/local/bin con sudo. Incollarla di nuovo non causa problemi; sostituisce ciò che c’era. exporter help install stampa la riga per il suo Mac.
Sorgenti
--source accetta uno di questi valori:
| sorgente | accettato anche | scrive |
|---|---|---|
apple |
apple-notes, applenotes, notes |
markdown o html |
bear |
markdown o html | |
logseq |
sempre markdown | |
contacts |
apple-contacts, addressbook |
sempre markdown |
messages |
imessage, chats, conversations |
sempre markdown |
screentime |
screen-time, usage |
sempre markdown, un file al giorno |
documents |
docs, files, pdf |
i formati selezionati sulla scheda Documenti |
Formati
--format accetta markdown (o md) oppure html; maiuscole e minuscole sono indifferenti. Qualsiasi altro valore si ferma con error: --format pdf: expected markdown | html e codice di uscita 64.
- senza il flag,
syncscrive ogni app nel formato impostato sulla sua scheda (Apple Notes e Bear hanno ciascuno il proprio) edexportscrive nel formato impostato per l’app che esporta;exporter help syncedexporter help exportmostrano quelli attuali - Logseq, Contatti, Messaggi e Tempo di utilizzo sono sempre markdown, e Documenti scrive i formati selezionati sulla sua scheda, quindi per loro
--format htmlviene ignorato con un avviso:note: logseq export is always markdown, so --format is ignored for this source. - Apple Notes scrive una pagina
.htmlper nota (il formato HTML), con gli allegati copiati inattachments/accanto e collegati, senza front matter. L’HTML di Bear è il testo semplice della nota dentro un<pre>, senza stile, con i riferimenti agli allegati lasciati come testo Markdown: i file vengono copiati, non collegati - il server MCP legge solo file markdown, quindi un’esportazione solo in HTML gli è invisibile
- Apple Notes e Bear scrivono un formato per esecuzione; solo Documenti scrive entrambi in una sola sincronizzazione. Un’esecuzione rimuove solo i vecchi file del proprio formato, quindi cambiando formato i file dell’altro restano nella cartella. Per avere entrambi i formati, dia a ciascuno la propria cartella:
exporter export --dest ~/Backups/notes-md --format markdown
exporter export --dest ~/Backups/notes-html --format html
sync
Esegue l’esportazione configurata nell’app, una volta, in modo incrementale, nelle cartelle di esportazione dell’app.
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
| flag | cosa fa | predefinito |
|---|---|---|
--source <source> |
solo questa app, ripetibile | ogni app collegata; quelle non collegate vengono saltate |
--format markdown|html |
solo per questa esecuzione, l’impostazione dell’app non cambia. Finisce nella stessa cartella di esportazione dell’altro formato; per tenerli entrambi, esporti ciascuno nella propria cartella con export --dest |
l’impostazione dell’app |
--full |
riesporta tutto. Prima di scrivere rimuove solo i file scritti da Exporter; tutto il resto nella cartella di esportazione rimane | disattivato |
--json |
un riepilogo leggibile da un programma | disattivato |
--quiet, -q |
solo errori | disattivato |
exporter sync --source apple
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
La riga di riepilogo è <source>: <succeeded> of <selected> exported, poi, se presenti, N failed, N removed (file di elementi eliminati, rinominati o spostati), N attachment issues, quindi la durata, il formato e la cartella scritta.
Se l’app è in esecuzione, sync non esporta nulla, esce con 0 e stampa Exporter is running: real-time sync is live, the export root is already current.
export
Un’esportazione singola in una cartella a sua scelta, per istantanee e script. Funziona anche con l’app aperta.
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
| flag | cosa fa | predefinito |
|---|---|---|
--dest <folder> |
obbligatorio. Deve trovarsi dentro una cartella autorizzata sulla scheda Riga di comando dell’app (“aggiungi cartella”). Un’autorizzazione su ~/Backups vale per ogni cartella al suo interno |
nessuno |
--source <source> |
l’app da esportare | apple |
--format markdown|html |
il formato per questa esecuzione | l’impostazione dell’app |
--organize folders|tags|smart |
solo Apple Notes: come le note vengono disposte nelle cartelle | l’impostazione dell’app |
--folder "Name" |
solo questa cartella di Apple Notes, ripetibile, nome confrontato senza distinzione tra maiuscole e minuscole | la selezione salvata nell’app |
--tag name |
solo questo tag, ripetibile, Apple Notes o Bear | la selezione salvata nell’app |
--dry-run |
stampa cosa verrebbe esportato, non scrive nulla | disattivato |
--json, --quiet (-q) |
come per sync | disattivato |
Senza --folder o --tag, Apple Notes e Bear esportano la selezione salvata nell’app. Logseq esporta l’intero grafo, Contatti ogni scheda, Messaggi ogni conversazione, Tempo di utilizzo ogni giorno; per loro i filtri vengono ignorati con un avviso.
exporter export --dest ~/Backups/notes-$(date +%F)
exporter export --dest ~/Backups/work --folder "Work" --format html
exporter export --dest ~/Backups/bear --source bear --tag journal
exporter export --dest ~/Backups/people --source contacts
exporter export --dest ~/Backups/papers --source documents
exporter export --dest ~/Backups/notes --dry-run
would export 100 apple notes · markdown → /Users/me/Backups/notes
list
exporter list sources|folders|tags|dests [--source apple|bear] [--json]
| elenco | cosa mostra | JSON |
|---|---|---|
sources |
ogni app, collegata o no, con il suo conteggio. Documenti non è elencato | [{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}], con pages per logseq, contacts, e days per screen-time |
folders |
cartelle di Apple Notes con il numero di note, rientrate per profondità. --source bear è un errore (codice di uscita 64) |
[{"name": "Work", "notes": 42, "level": 0}] |
tags |
tag con i conteggi, Apple Notes per impostazione predefinita, Bear con --source bear |
[{"name": "journal", "notes": 12}] |
dests |
le cartelle in cui export --dest può scrivere, più la cartella di esportazione di ogni app |
[{"path": "/Users/me/Backups", "kind": "granted"}], dove kind è granted, granted, volume not mounted o export root (apple-notes) |
exporter list folders --json
[{"name": "Work", "notes": 42, "level": 0}]
status
exporter status [--json]
apple notes connected · last export 2026-09-11 03:00
bear not connected
logseq not connected
contacts not connected
messages connected · last export 2026-09-11 03:01
screen time not connected
documents not connected
root (apple-notes) /Users/me/Documents/notes
root (messages) /Users/me/Documents/messages
destinations /Users/me/Backups
version 3.24 · free · 100 of 100 free notes used
messages free · 10 of 10 free conversations used
app not running
Con --json: un oggetto per app, chiamato apple-notes, bear, logseq, contacts, messages, screen-time, documents, ciascuno {"connected": true, "lastExport": "2026-09-11 03:00"} (null se mai esportato); destinations (percorsi); tier (full o free, lo sblocco di Apple Notes) e freeNotesUsed; contactsTier e freeContactsUsed; messagesTier e freeConversationsUsed; screenTimeTier e freeDaysUsed; appRunning. Gli orari sono locali, yyyy-MM-dd HH:mm.
log
Le esecuzioni di esportazione recenti, dalla più nuova: lo stesso registro che mostra l’app, da ogni cartella di esportazione e da ogni cartella --dest autorizzata. Le cartelle con data create sotto una cartella autorizzata non vengono lette; il loro registro è in <folder>/.exporter/.
exporter log [--last N] [--json]
| flag | cosa fa | predefinito |
|---|---|---|
--last N |
quante esecuzioni | 10 |
--json |
un oggetto per esecuzione | disattivato |
2026-09-11 03:00 apple-notes 1204/1204 exported 3 removed clean → /Users/me/Documents/notes
JSON: [{"source", "finishedAt", "selected", "succeeded", "failed", "format", "status", "destination", "prunedFiles", "runError"}]. status è clean, warnings (allegati mancanti) o failures.
doctor
Verifica che l’esportazione senza interfaccia funzionerà e stampa una riga per controllo: ok, FAIL con sotto una riga fix:, warn, oppure -- per un’informazione.
exporter doctor
Controlla che il database di ogni app collegata sia leggibile e la sua cartella di esportazione scrivibile, che ogni autorizzazione di cartella salvata sia valida, che ogni cartella --dest sia scrivibile, l’indice e il comando installato. Termina con il livello della versione, se l’app è in esecuzione, e l’ultimo arresto anomalo, se c’è stato. Con l’uscita 0 stampa all good., con l’uscita 2 stampa N problem(s) found.
report
Stampa un report diagnostico (versione dell’app, macOS e hardware, stato delle connessioni, esecuzioni recenti, ultimo arresto anomalo; nessun contenuto delle note) e lo copia negli appunti.
exporter report [--send] [--email <addr>]
| flag | cosa fa | predefinito |
|---|---|---|
--send |
ci invia il report e stampa sent., oppure offline: queued, will send on the next run or app launch. |
disattivato |
--email <addr> |
aggiunge il suo indirizzo così possiamo risponderle | nessuno |
help e version
exporter help [topic]: argomentisync,export,list,status,log,doctor,report,cron,install. L’aiuto per un comando mostra le sue impostazioni attuali come valori predefiniti- anche
sync,export,list,logereportaccettano--helpo-h exporter version(o--version,-v) stampaexporter 3.24exporterda solo in un terminale stampa la panoramica ed esce con 64
Output JSON
--json funziona con sync, export, list, status e log. L’output è formattato, con chiavi ordinate. Per sync ed export aggiunga --quiet: senza, le righe di avanzamento e gli avvisi vengono stampati su stdout prima del JSON. export stampa un oggetto di riepilogo, sync stampa {"runs": [...]} con uno per sorgente:
{
"attachmentIssues" : 0,
"durationSec" : 18.2,
"failed" : 0,
"format" : "markdown",
"root" : "/Users/me/Documents/notes",
"runError" : null,
"selected" : 1204,
"source" : "apple-notes",
"status" : "clean",
"succeeded" : 1204
}
Mentre l’app è in esecuzione, sync stampa la sua riga e nessun JSON. Gli errori vanno su stderr come error: <what happened and what to do>.
Codici di uscita
| codice | significato |
|---|---|
| 0 | ok, compresa un’esecuzione interrotta dalla quota gratuita |
| 1 | errori di esportazione: un elemento non è riuscito, l’esecuzione ha incontrato un errore, oppure ha selezionato elementi e non ne ha scritto nessuno |
| 2 | configurazione necessaria: app non collegata, cartella non autorizzata, cartella o tag non trovati, niente da esportare; doctor ha trovato problemi; il comando installato è in un formato vecchio o l’app a cui punta non c’è più |
| 64 | uso errato: comando o flag sconosciuto, valore mancante o non valido, --folder con Bear, list folders --source bear, exporter da solo in un terminale |
Dove finiscono i file
sync scrive nella cartella di esportazione impostata per ogni app in Exporter, come ~/Documents/notes o ~/Documents/messages; export scrive in --dest. Una cartella al livello della sua home o un livello sotto, come ~/Documents stessa, riceve una sottocartella per app (notes-export, messages-export e così via), e una cartella più profonda viene usata così com’è. La riga di riepilogo (dopo la freccia) e il campo JSON root mostrano la cartella reale.
Ogni cartella di esportazione contiene .exporter/last-export.json e .exporter/last-export.md (l’ultima esecuzione) e .exporter/history/ (le ultime 50 esecuzioni). Apple Notes, Contatti, Messaggi, Tempo di utilizzo e Documenti tengono anche .exporter/files.json, ogni file scritto da un’esecuzione: l’esecuzione successiva rimuove solo i file elencati lì che nessun elemento produce più (Tempo di utilizzo non rimuove mai il file di un giorno). Anche Bear e Logseq rimuovono, all’esecuzione successiva, i file delle note che ha eliminato, rinominato o a cui ha cambiato tag. Le esportazioni di Apple Notes e Logseq ricevono anche bases/ con viste di Obsidian.
Quota gratuita
La riga di comando ha le stesse quote dell’app:
| app | gratis |
|---|---|
| Apple Notes | 100 note |
| Contatti | 100 contatti |
| Messaggi | le 10 conversazioni più recenti |
| Tempo di utilizzo | i 10 giorni più recenti alla prima sincronizzazione, e solo quelli: i giorni successivi richiedono lo sblocco |
| Documenti | i 10 documenti modificati più di recente |
| Bear e Logseq | illimitato |
Gli elementi già esportati continuano a risincronizzarsi gratis; la quota ferma solo quelli nuovi. Un’esecuzione che la raggiunge esporta comunque ciò che può, esce con 0 e stampa un avviso (non con --quiet):
note: 42 note(s) skipped: free version limit (100 of 100 free notes). upgrade in the app to export everything.
note: 58 contact(s) skipped: free version limit (100 of 100 free contacts). unlock contacts in the app to export everything.
note: 1522 conversation(s) skipped: free version limit (10 of 10 free conversations). unlock messages in the app to export everything.
note: 11 day(s) skipped: free version limit (10 of 10 free days). unlock screen time in the app to archive every day.
note: 5 document(s) skipped: free version limit (10 of 10 free documents). unlock documents in the app to convert every one.
status --json riporta il livello e il numero di elementi usati per Apple Notes, Contatti, Messaggi e Tempo di utilizzo. Ogni app con quota si sblocca con il proprio acquisto in-app una tantum dentro Exporter, con prezzi per paese, senza abbonamento e senza pagamento sul web. La riga di comando legge l’acquisto a ogni esecuzione; se l’App Store non risponde entro 5 secondi, l’esecuzione continua con la quota gratuita.
Pianificazione
exporter help cron stampa queste righe con il percorso completo del comando sul suo Mac: usi quello, perché il PATH di cron potrebbe non includere la cartella di installazione. In un crontab, scriva % come \%:
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
Per Carbon Copy Cloner e altri strumenti di backup, esegua exporter sync come script preliminare e agisca in base al codice di uscita. Il comando resta attivo per tutta l’esportazione, anche quando macOS lo sospende senza nessun utente connesso. Mentre l’app è in esecuzione, con la finestra aperta o chiusa, sync non fa nulla: la sincronizzazione in tempo reale mantiene già aggiornata la cartella.
Server MCP
È l’app, non la riga di comando, ad avviare un server MCP locale che permette a Claude, Cursor, VS Code e altri client di cercare e leggere le sue esportazioni, su http://localhost:8744/mcp. La pagina del server MCP spiega tutto ciò che lo riguarda, dall’avvio ai suoi sei strumenti.
Risoluzione dei problemi
Esegua prima exporter doctor; ogni controllo non riuscito stampa la sua soluzione. Aiuto copre anche i messaggi dell’app.
X is not authorized: aggiunga la cartella (o una cartella superiore) sulla scheda Riga di comando, poi esegua di nuovo.exporter list destsmostra cosa è autorizzatoapple notes is not set up. open Exporter and connect Apple Notes + an export folder.(lo stesso per ogni app): la colleghi in Exportersyncstampa che Exporter è in esecuzione: non c’è nulla da fare, l’app mantiene aggiornata la cartella. Usiexport --destper una copia separatano notes were written. run "exporter doctor" to check folders and permissions.: l’esecuzione ha selezionato note e non ne ha scritta nessuna;doctorcontrolla le cartelle e i permessibookmark broken: la cartella è stata spostata, eliminata, o il suo volume non è montato. La scelga di nuovo nell’app- il comando installato è in un formato vecchio, oppure cron e gli strumenti di backup vedono il codice di uscita 19: incolli di nuovo il comando di installazione
- l’app è stata spostata dopo l’installazione del comando: incolli di nuovo il comando di installazione
- l’app è sbloccata ma l’esecuzione risulta gratuita: la verifica dell’acquisto attende al massimo 5 secondi, poi continua con la quota gratuita. Esegua di nuovo
- un problema che doctor non sa spiegare:
exporter report --send --email you@example.com