# Komentorivi exporter

Aja vientisi Päätteestä, cronista, varmuuskopiotyökaluista ja agenteista.

`exporter` on Exporterin Mac-appi ajettuna ilman ikkunaa. Se käyttää samoja yhteyksiä, vientikansioita, valintoja ja asetuksia, jotka määritit apissa, ja kirjoittaa samaan vientilokiin. Se toimii, kun appi on suljettu, eikä se koskaan kysy mitään: kaikki puuttuva pysäyttää ajon paluukoodilla 2 ja yhdellä rivillä, joka kertoo, mitä tehdä. Vain macOS.

## Asenna

1. Asenna Exporter Mac App Storesta ([lataa](https://exporter.dev/download)) ja avaa se.
2. Yhdistä appi (Applen Muistiinpanot, Bear, Logseq, Yhteystiedot, Viestit tai Ruutuaika) tai Dokumentit-kansio ja valitse sen vientikansio ([aloita](https://exporter.dev/docs/getting-started)). Nämä luvat voi antaa vain apissa.
3. Paina apin Komentorivi-kortilla "Kopioi asennuskomento" ja liitä se kerran Päätteeseen.

Appi toimii hiekkalaatikossa eikä voi kirjoittaa PATH-muuttujaasi, minkä vuoksi viimeinen vaihe on liittäminen. Rivi asentaa komennon `exporter` kansioon `/opt/homebrew/bin`, kun kansio on olemassa ja kuuluu sinulle (ei sudoa), muuten kansioon `/usr/local/bin` sudon kanssa. Sen liittäminen uudelleen on turvallista; se korvaa sen, mitä siellä oli. Rivi asentaa myös komennon `notes-exporter`, komennon vanhan nimen, joten vanhemmat skriptit ja cron-rivit toimivat edelleen. `exporter help install` tulostaa rivin Macillesi.

## Lähteet

`--source` ottaa jonkin näistä:

| lähde | hyväksytään myös | kirjoittaa |
| --- | --- | --- |
| `apple` | `apple-notes`, `applenotes`, `notes` | markdown tai html |
| `bear` | | markdown tai html |
| `logseq` | | aina markdown |
| `contacts` | `apple-contacts`, `addressbook` | aina markdown |
| `messages` | `imessage`, `chats`, `conversations` | aina markdown |
| `screentime` | `screen-time`, `usage` | aina markdown, yksi tiedosto päivää kohden |
| `reminders` | `apple-reminders`, `lists`, `todos` | aina markdown, yksi tiedosto listaa kohden |
| `claude-code` | `claudecode`, `claude`, `claude-code-sessions` | markdown, alkuperäinen loki tai molemmat, kortin valinnan mukaan |
| `wallet` | `passes`, `pkpass`, `boarding-passes`, `tickets` | aina markdown, yksi tiedosto korttia kohden |
| `documents` | `docs`, `files`, `pdf` | Dokumentit-kortilla valitut muodot |

## Muodot

`--format` ottaa arvon `markdown` (tai `md`) tai `html`; kirjainkoolla ei ole väliä. Kaikki muu pysähtyy virheeseen `error: --format pdf: expected markdown | html` ja paluukoodiin 64.

- ilman sitä `sync` kirjoittaa jokaisen apin sen kortille asetetussa muodossa (Applen Muistiinpanoilla ja Bearilla on kummallakin omansa), ja `export` kirjoittaa viemänsä apin asetuksen mukaan; `exporter help sync` ja `exporter help export` näyttävät nykyiset
- Logseq, Yhteystiedot, Viestit ja Ruutuaika ovat aina markdownia, ja Dokumentit kirjoittaa kortillaan valitut muodot, joten niille `--format html` ohitetaan huomautuksen kera: `note: logseq export is always markdown, so --format is ignored for this source.`
- Applen Muistiinpanot kirjoittaa yhden `.html`-sivun muistiinpanoa kohden ([HTML-muoto](https://exporter.dev/docs/notes#markdown-and-html)), liitteet kopioituina viereiseen kansioon `attachments/` ja linkitettyinä, ilman frontmatteria. Bearin HTML on muistiinpanon pelkkä teksti `<pre>`-elementin sisällä ilman muotoilua, ja viittaukset liitteisiin jäävät Markdown-tekstiksi: tiedostot kopioidaan, mutta niitä ei linkitetä
- MCP-palvelin lukee vain markdown-tiedostoja, joten pelkkä HTML-vienti on sille näkymätön
- Applen Muistiinpanot ja Bear kirjoittavat yhden muodon ajoa kohden; vain Dokumentit kirjoittaa molemmat yhdellä synkronoinnilla. Ajo poistaa vain oman muotonsa vanhat tiedostot, joten vaihtaminen jättää toisen muodon tiedostot kansioon. Kumpaakin muotoa varten anna kummallekin oma kansio:

```sh
exporter export --dest ~/Backups/notes-md   --format markdown
exporter export --dest ~/Backups/notes-html --format html
```

## sync

Ajaa apissa määrittämäsi viennin kerran, inkrementaalisesti, apin vientikansioihin.

```sh
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
```

| valitsin | mitä se tekee | oletus |
| --- | --- | --- |
| `--source <source>` | vain tämä appi, voi toistaa | jokainen yhdistetty appi; yhdistämättömät ohitetaan |
| `--format markdown\|html` | vain tämä ajo, apin asetuksesi ei muutu. Se päätyy samaan vientikansioon kuin toinen muoto; säilyttääksesi molemmat vie kumpikin omaan kansioonsa komennolla `export --dest` | apin asetuksesi |
| `--full` | vie kaikki uudelleen. Se poistaa ennen kirjoittamista vain Exporterin kirjoittamat tiedostot; kaikki muu vientikansiossa säilyy | pois |
| `--json` | koneluettava yhteenveto | pois |
| `--quiet`, `-q` | vain virheet | pois |

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

```text
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
```

Yhteenvetorivi on `<source>: <succeeded> of <selected> exported`, sitten, kun niitä on, `N failed`, `N removed` (poistettujen, uudelleen nimettyjen tai siirrettyjen kohteiden tiedostot), `N attachment issues`, ja lopuksi kesto, muoto ja kansio, johon kirjoitettiin.

Jos appi on käynnissä, `sync` ei vie mitään, päättyy koodilla 0 ja tulostaa `Exporter is running: real-time sync is live, the export root is already current.`

## export

Kertavienti valitsemaasi kansioon, tilannevedoksia ja skriptejä varten. Se toimii hyvin apin ollessa auki.

```sh
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
```

| valitsin | mitä se tekee | oletus |
| --- | --- | --- |
| `--dest <folder>` | pakollinen. Sen on oltava kansiossa, jolle on annettu pääsy apin Komentorivi-kortilla ("Lisää kansio…"). Pääsy kansioon `~/Backups` kattaa jokaisen sen alla olevan kansion | ei mitään |
| `--source <source>` | vietävä appi | `apple` |
| `--format markdown\|html` | tämän ajon muoto | apin asetuksesi |
| `--organize folders\|tags\|smart` | vain Applen Muistiinpanot: miten muistiinpanot järjestetään kansioihin tässä ajossa | kortin "Järjestä" |
| `--folder "Name"` | vain tämä Applen Muistiinpanojen kansio, voi toistaa, nimi täsmätään kirjainkoosta välittämättä | apissa tallennettu valinta |
| `--tag name` | vain tämä tunniste, voi toistaa, Applen Muistiinpanot tai Bear | apissa tallennettu valinta |
| `--dry-run` | tulosta, mitä vietäisiin, älä kirjoita mitään | pois |
| `--json`, `--quiet` (`-q`) | kuten syncissä | pois |

Ilman valitsinta `--folder` tai `--tag` Applen Muistiinpanot ja Bear vievät apissa tallennetun valinnan. Logseq vie koko graafin; Yhteystiedot, Viestit, Ruutuaika ja Dokumentit vievät sen, mitä niiden kortilla on valittuna, samoin kuin `sync`; suodattimet ohitetaan niille huomautuksen kera. Dokumenteille `--dry-run` tulostaa `would convert <n> document(s)`, ja ajo huomauttaa tiedostoista, joita se ei voi lukea: `note: 3 file(s) skipped: not a format any engine converts.`

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

| lista | mitä se näyttää | JSON |
| --- | --- | --- |
| `sources` | jokainen appi, yhdistetty tai ei, määrineen. Dokumentteja ei listata | `[{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]`, logseqille `pages`, `contacts`, ja `screen-time`-lähteelle `days` |
| `folders` | Applen Muistiinpanojen kansiot muistiinpanomäärineen, sisennettyinä syvyyden mukaan. `--source bear` on virhe (paluukoodi 64) | `[{"name": "Work", "notes": 42, "level": 0}]` |
| `tags` | tunnisteet määrineen, oletuksena Applen Muistiinpanot, Bear valitsimella `--source bear` | `[{"name": "journal", "notes": 12}]` |
| `dests` | kansiot, joihin `export --dest` saa kirjoittaa, sekä jokaisen apin vientikansio | `[{"path": "/Users/me/Backups", "kind": "granted"}]`, jossa `kind` on `granted`, `granted, volume not mounted` tai `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 · 50 of 50 free conversations used
organize       apple notes by folder · contacts in one folder
app            not running
```

Valitsimella `--json`: yksi objekti appia kohden, nimiltään `apple-notes`, `bear`, `logseq`, `contacts`, `messages`, `screen-time`, `documents`, kukin `{"connected": true, "lastExport": "2026-09-11 03:00"}` (`null`, kun vientiä ei ole koskaan tehty); `destinations` (polut); `tier` (`full` tai `free`, Applen Muistiinpanojen avaus) ja `freeNotesUsed`; `contactsTier` ja `freeContactsUsed`; `messagesTier` ja `freeConversationsUsed`; `screenTimeTier` ja `freeDaysUsed`; `organize` (`{"appleNotes": "folders", "contacts": "flat"}`, korttien "Järjestä"); `appRunning`. Ajat ovat paikallisia, `yyyy-MM-dd HH:mm`.

## log

Viimeisimmät vientiajot, uusin ensin: sama loki, jonka appi näyttää, jokaisesta vientikansiosta ja jokaisesta `--dest`-kansiosta, jolle on annettu pääsy. Päivättyjä kansioita, jotka on luotu pääsyn saaneen kansion alle, ei lueta; niiden loki on kansiossa `<folder>/.exporter/`.

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

| valitsin | mitä se tekee | oletus |
| --- | --- | --- |
| `--last N` | montako ajoa | 10 |
| `--json` | yksi objekti ajoa kohden | pois |

```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` on `clean`, `warnings` (liitteitä puuttuu) tai `failures`.

## doctor

Tarkistaa, että vienti ilman ikkunaa toimii, ja tulostaa yhden rivin tarkistusta kohden: `ok`, `FAIL` ja sen alla rivi `fix:`, `warn` tai `--` tietona.

```sh
exporter doctor
```

Se tarkistaa, että jokaisen yhdistetyn apin tietokanta on luettavissa ja sen vientikansio kirjoitettavissa, että jokainen tallennettu kansiolupa löytyy, että jokainen `--dest`-kansio on kirjoitettavissa, hakemiston ja asennetun komennon. Lopuksi se kertoo versiotason, onko appi käynnissä, ja viimeisimmän kaatumisen, jos sellainen oli. Paluukoodi 0 tulostaa `all good.`, paluukoodi 2 tulostaa `N problem(s) found.`

## report

Tulostaa diagnostiikkaraportin (apin versio, macOS ja laitteisto, yhteyksien tila, viimeisimmät ajot, viimeisin kaatuminen; ei muistiinpanojen sisältöä) ja kopioi sen leikepöydälle.

```sh
exporter report [--send] [--email <addr>]
```

| valitsin | mitä se tekee | oletus |
| --- | --- | --- |
| `--send` | lähettää raportin meille ja tulostaa `sent.` tai `offline: queued, will send on the next run or app launch.` | pois |
| `--email <addr>` | lisää osoitteesi, jotta voimme vastata | ei mitään |

## Ohje ja versio

- `exporter help [topic]`: aiheet `sync`, `export`, `list`, `status`, `log`, `doctor`, `report`, `cron`, `install`. Komennon ohje näyttää nykyiset asetuksesi oletuksina
- `sync`, `export`, `list`, `log` ja `report` ottavat myös valitsimen `--help` tai `-h`
- `exporter version` (tai `--version`, `-v`) tulostaa `exporter 3.24`
- pelkkä `exporter` päätteessä tulostaa yleiskatsauksen ja päättyy koodilla 64

## JSON-tuloste

`--json` toimii komennoissa `sync`, `export`, `list`, `status` ja `log`. Tuloste on siististi muotoiltu, avaimet järjestettyinä. Lisää komentoihin `sync` ja `export` valitsin `--quiet`: ilman sitä edistymis- ja huomautusrivit tulostetaan stdoutiin ennen JSONia. `export` tulostaa yhden yhteenveto-objektin, `sync` tulostaa `{"runs": [...]}`, yksi kutakin lähdettä kohden:

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

Kun appi on käynnissä, `sync` tulostaa yhden rivinsä eikä JSONia. Virheet menevät stderriin muodossa `error: <what happened and what to do>`.

## Paluukoodit

| koodi | merkitys |
| --- | --- |
| 0 | ok, myös ajo, jonka ilmainen kiintiö katkaisi |
| 1 | vientivirheet: kohde epäonnistui, ajo kohtasi virheen, tai se valitsi kohteita eikä kirjoittanut yhtään |
| 2 | vaatii käyttöönoton: appia ei ole yhdistetty, kansiolla ei ole lupaa, kansiota tai tunnistetta ei löytynyt, ei mitään vietävää; `doctor` löysi ongelmia; asennettu komento on vanhaa muotoa tai appia, johon se osoittaa, ei enää ole |
| 64 | käyttö: tuntematon komento tai valitsin, puuttuva tai virheellinen arvo, `--folder` Bearin kanssa, `list folders --source bear`, pelkkä `exporter` päätteessä |

## Minne tiedostot menevät

`sync` kirjoittaa kullekin apille Exporterissa asetettuun vientikansioon, kuten `~/Documents/notes` tai `~/Documents/messages`; `export` kirjoittaa kohteeseen `--dest`. Kotikansion tasolla tai yhtä tasoa sen alla oleva kansio, kuten itse `~/Documents`, saa appikohtaisen alikansion (`notes-export`, `messages-export` ja niin edelleen), ja syvemmällä olevaa kansiota käytetään sellaisenaan. Yhteenvetorivi (nuolen jälkeen) ja JSON-kenttä `root` näyttävät todellisen kansion.

Jokaisessa vientikansiossa on `.exporter/last-export.json` ja `.exporter/last-export.md` (viimeisin ajo) sekä `.exporter/history/` (50 viimeisintä ajoa). Jokaisella apilla on myös `.exporter/files.json`, jokainen ajon kirjoittama tiedosto: seuraava ajo poistaa vain siinä luetellut tiedostot, joita mikään kohde ei enää tuota, joten poistamasi, uudelleen nimeämäsi tai uudelleen tunnisteistamasi muistiinpanot menettävät vanhan tiedostonsa (Ruutuaika ei koskaan poista päivätiedostoa). Applen Muistiinpanojen ja Logseqin viennit saavat myös kansion `bases/` Obsidianin näkymineen.

## Ilmainen kiintiö

Komentorivillä on samat kiintiöt kuin apilla:

| appi | ilmaiseksi |
| --- | --- |
| Applen Muistiinpanot | 100 muistiinpanoa |
| Yhteystiedot | 100 yhteystietoa |
| Viestit | 50 viimeisintä keskustelua |
| Ruutuaika | ensimmäisen synkronoinnin 10 viimeisintä päivää, ja vain ne: myöhemmät päivät vaativat avauksen |
| Dokumentit | 10 viimeksi muokattua dokumenttia |
| Bear ja Logseq | rajattomasti |

Jo viedyt kohteet synkronoidaan edelleen ilmaiseksi; kiintiö pysäyttää vain uudet. Ajo, joka saavuttaa sen, vie silti sen, minkä saa, päättyy koodilla 0 ja tulostaa huomautuksen (ei valitsimella `--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 (50 of 50 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` sisältää tason ja käytetyn määrän Applen Muistiinpanoille, Yhteystiedoille, Viesteille ja Ruutuajalle. Jokainen rajattu appi avataan omalla kertaostollaan Exporterin sisällä, [hinnoiteltuna maittain](https://exporter.dev/pricing), ilman tilausta ja ilman verkkomaksua. Komentorivi lukee oston jokaisella ajolla; jos App Store ei vastaa 5 sekunnissa, ajo jatkuu ilmaisella kiintiöllä.

## Ajastus

`exporter help cron` tulostaa nämä rivit komennon koko polun kera Macillasi: käytä sitä, koska cronin PATH ei välttämättä sisällä asennuskansiota. Kirjoita crontabissa `%` muodossa `\%`:

```sh
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
```

Carbon Copy Cloneria ja muita varmuuskopiotyökaluja varten aja `exporter sync` ennakkoskriptinä ja haaraudu paluukoodin mukaan. Komento pysyy liitettynä koko viennin ajan, myös kun macOS keskeyttää sen, kun kukaan ei ole kirjautuneena. Kun appi on käynnissä, ikkuna auki tai kiinni, `sync` ei tee mitään: reaaliaikainen synkronointi pitää kansion jo ajan tasalla.

Varmuuskopiotyökalun, joka ajaa skriptinsä roottina (kuten Carbon Copy Cloner), on käynnistettävä `exporter` kirjautuneen käyttäjän istunnossa, ei pelkästään tämän käyttäjän nimissä. Pelkkä `sudo -u` pysäyttää sen heti paluukoodilla 133; lisää eteen `launchctl asuser`:

```sh
/bin/launchctl asuser "$(id -u "$CONSOLE_USER")" /usr/bin/sudo -u "$CONSOLE_USER" exporter sync
```

## MCP-palvelin

Appi, ei komentorivi, ajaa paikallista MCP-palvelinta, jonka avulla Claude, Cursor, VS Code ja muut asiakkaat voivat hakea vientejäsi ja lukea niitä, osoitteessa `http://localhost:8744/mcp`. [MCP-palvelimen sivu](https://exporter.dev/docs/mcp) kertoo siitä kaiken käynnistämisestä sen kuuteen työkaluun.

## Vianmääritys

Aja ensin `exporter doctor`; jokainen epäonnistunut tarkistus tulostaa korjauksensa. [Ohje](https://exporter.dev/docs/help) kattaa myös apin ilmoitukset.

- `X is not authorized`: lisää kansio (tai sen yläkansio) Komentorivi-kortilla ja aja uudelleen. `exporter list dests` näyttää, mille on annettu pääsy
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (sama jokaiselle apille): yhdistä se Exporterissa
- `sync` tulostaa, että Exporter on käynnissä: ei mitään tehtävää, appi pitää kansion ajan tasalla. Käytä erilliseen kopioon komentoa `export --dest`
- `no notes were written. run "exporter doctor" to check folders and permissions.`: ajo valitsi muistiinpanoja eikä kirjoittanut yhtään; `doctor` tarkistaa kansiot ja luvat
- `bookmark broken`: kansio on siirretty tai poistettu, tai sen taltio ei ole liitettynä. Valitse se uudelleen apissa
- asennettu komento on vanhaa muotoa, tai cron ja varmuuskopiotyökalut näkevät paluukoodin 19: liitä asennuskomento uudelleen
- appi on siirtynyt komennon asentamisen jälkeen: liitä asennuskomento uudelleen
- avaus ostettu, mutta ajo sanoo ilmainen: ostotarkistus odottaa enintään 5 sekuntia ja jatkaa sitten ilmaisella kiintiöllä. Aja uudelleen
- ongelma, jota doctor ei osaa selittää: `exporter report --send --email you@example.com`

## Related

- [MCP-palvelin](https://exporter.dev/fi/docs/mcp): Yhdistä Claude ja muut agentit
- [Agenteille](https://exporter.dev/fi/agents): Taidot, komentorivi ja MCP agenteille
- [Applen Muistiinpanot](https://exporter.dev/fi/docs/notes): Kansiot, kentät, HTML ja korjaukset
- [Changelog](https://exporter.dev/changelog): What changed in each version

---

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