# 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

1. Installi Exporter dal Mac App Store ([download](https://exporter.dev/download)) e lo apra.
2. 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](https://exporter.dev/docs/getting-started)). Questi permessi si possono concedere solo nell'app.
3. 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, `sync` scrive ogni app nel formato impostato sulla sua scheda (Apple Notes e Bear hanno ciascuno il proprio) ed `export` scrive nel formato impostato per l'app che esporta; `exporter help sync` ed `exporter help export` mostrano 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 html` viene ignorato con un avviso: `note: logseq export is always markdown, so --format is ignored for this source.`
- Apple Notes scrive una pagina `.html` per nota ([il formato HTML](https://exporter.dev/docs/notes#markdown-and-html)), con gli allegati copiati in `attachments/` 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:

```sh
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.

```sh
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 |

```sh
exporter sync --source apple
```

```text
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.

```sh
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.

```sh
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
```

```text
would export 100 apple notes · markdown → /Users/me/Backups/notes
```

## list

```sh
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)` |

```sh
exporter list folders --json
```

```json
[{"name": "Work", "notes": 42, "level": 0}]
```

## status

```sh
exporter status [--json]
```

```text
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/`.

```sh
exporter log [--last N] [--json]
```

| flag | cosa fa | predefinito |
| --- | --- | --- |
| `--last N` | quante esecuzioni | 10 |
| `--json` | un oggetto per esecuzione | disattivato |

```text
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.

```sh
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.

```sh
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]`: argomenti `sync`, `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`, `log` e `report` accettano `--help` o `-h`
- `exporter version` (o `--version`, `-v`) stampa `exporter 3.24`
- `exporter` da 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:

```json
{
  "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`):

```text
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](https://exporter.dev/pricing), 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 `\%`:

```sh
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](https://exporter.dev/docs/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](https://exporter.dev/docs/help) 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 dests` mostra cosa è autorizzato
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (lo stesso per ogni app): la colleghi in Exporter
- `sync` stampa che Exporter è in esecuzione: non c'è nulla da fare, l'app mantiene aggiornata la cartella. Usi `export --dest` per una copia separata
- `no notes were written. run "exporter doctor" to check folders and permissions.`: l'esecuzione ha selezionato note e non ne ha scritta nessuna; `doctor` controlla le cartelle e i permessi
- `bookmark 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`

## Related

- [MCP server](https://exporter.dev/docs/mcp): Connect Claude and other agents
- [For agents](https://exporter.dev/agents): Skills, command line and MCP for agents
- [Apple Notes](https://exporter.dev/docs/notes): Folders, fields, HTML and fixes
- [Changelog](https://exporter.dev/changelog): What changed in each version

---

human version: https://exporter.dev/it/docs/cli
every page: https://exporter.dev/llms.txt
