# La ligne de commande exporter

Lancez vos exports depuis Terminal, cron, les outils de sauvegarde et les agents.

`exporter` est l’app Mac Exporter lancée sans fenêtre. Elle utilise les connexions, les dossiers d’export, la sélection et les réglages que vous avez configurés dans l’app, et écrit dans le même journal d’export. Elle fonctionne app fermée et ne pose jamais de question : tout élément manquant arrête le passage avec le code de sortie 2 et une ligne qui dit quoi faire. macOS uniquement.

## Installation

1. Installez Exporter depuis le Mac App Store ([télécharger](https://exporter.dev/download)) et ouvrez-le.
2. Connectez une app (Apple Notes, Bear, Logseq, Contacts, Messages ou Temps d’écran) ou un dossier Documents, et choisissez son dossier d’export ([premiers pas](https://exporter.dev/docs/getting-started)). Ces autorisations ne peuvent être accordées que dans l’app.
3. Sur la carte Ligne de commande de l’app, appuyez sur « copier la commande d’installation » et collez-la une fois dans Terminal.

L’app est sandboxée et ne peut pas écrire dans votre PATH, d’où le collage de la dernière étape. La ligne installe `exporter` dans `/opt/homebrew/bin` si ce dossier existe et vous appartient (sans sudo), sinon dans `/usr/local/bin` avec sudo. La coller à nouveau est sans risque ; elle remplace ce qui s’y trouvait. `exporter help install` affiche la ligne pour votre Mac.

## Sources

`--source` accepte l’une de ces valeurs :

| source | également accepté | écrit |
| --- | --- | --- |
| `apple` | `apple-notes`, `applenotes`, `notes` | markdown ou html |
| `bear` | | markdown ou html |
| `logseq` | | toujours markdown |
| `contacts` | `apple-contacts`, `addressbook` | toujours markdown |
| `messages` | `imessage`, `chats`, `conversations` | toujours markdown |
| `screentime` | `screen-time`, `usage` | toujours markdown, un fichier par jour |
| `documents` | `docs`, `files`, `pdf` | les formats cochés sur la carte Documents |

## Formats

`--format` accepte `markdown` (ou `md`) ou `html`, sans tenir compte de la casse. Toute autre valeur arrête le passage avec `error: --format pdf: expected markdown | html` et le code 64.

- sans cette option, `sync` écrit chaque app au format réglé sur sa carte (Apple Notes et Bear ont chacun le leur) et `export` écrit selon le réglage de l’app qu’il exporte ; `exporter help sync` et `exporter help export` affichent les réglages actuels
- Logseq, Contacts, Messages et Temps d’écran sont toujours en markdown, et Documents écrit les formats cochés sur sa carte : pour eux, `--format html` est donc ignoré, avec une note : `note: logseq export is always markdown, so --format is ignored for this source.`
- Apple Notes écrit une page `.html` par note ([le format HTML](https://exporter.dev/docs/notes#markdown-and-html)), pièces jointes copiées dans `attachments/` à côté et liées, sans front matter. Le HTML de Bear est le texte brut de la note dans une balise `<pre>`, sans mise en forme, avec les références aux pièces jointes laissées en texte Markdown : les fichiers sont copiés, pas liés
- le serveur MCP ne lit que les fichiers markdown : un export uniquement en HTML lui est invisible
- Apple Notes et Bear écrivent un format par passage ; seul Documents écrit les deux en une synchronisation. Un passage ne supprime que les anciens fichiers de son propre format : changer de format laisse donc les fichiers de l’autre format dans le dossier. Pour les deux formats, donnez à chacun son propre dossier :

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

## sync

Lance une fois l’export configuré dans l’app, de façon incrémentale, dans les dossiers d’export de l’app.

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

| option | effet | par défaut |
| --- | --- | --- |
| `--source <source>` | uniquement cette app, répétable | toutes les apps connectées ; celles qui ne le sont pas sont ignorées |
| `--format markdown\|html` | pour ce passage uniquement, votre réglage de l’app reste inchangé. Le résultat arrive dans le même dossier d’export que l’autre format ; pour garder les deux, exportez chacun dans son propre dossier avec `export --dest` | votre réglage de l’app |
| `--full` | réexporte tout. Ne supprime avant d’écrire que les fichiers écrits par Exporter ; tout le reste du dossier d’export demeure | désactivé |
| `--json` | un résumé lisible par une machine | désactivé |
| `--quiet`, `-q` | erreurs uniquement | désactivé |

```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 ligne de résumé est `<source>: <succeeded> of <selected> exported`, puis, le cas échéant, `N failed`, `N removed` (fichiers d’éléments supprimés, renommés ou déplacés), `N attachment issues`, puis la durée, le format et le dossier écrit.

Si l’app est ouverte, `sync` n’exporte rien, se termine avec le code 0 et affiche `Exporter is running: real-time sync is live, the export root is already current.`

## export

Un export ponctuel vers le dossier de votre choix, pour les instantanés et les scripts. Il fonctionne très bien app ouverte.

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

| option | effet | par défaut |
| --- | --- | --- |
| `--dest <folder>` | obligatoire. Doit se trouver dans un dossier autorisé sur la carte Ligne de commande de l’app (« ajouter un dossier »). Une autorisation sur `~/Backups` couvre tous les dossiers en dessous | aucun |
| `--source <source>` | l’app à exporter | `apple` |
| `--format markdown\|html` | le format pour ce passage | votre réglage de l’app |
| `--organize folders\|tags\|smart` | Apple Notes uniquement : la façon dont les notes sont rangées en dossiers | votre réglage de l’app |
| `--folder "Name"` | uniquement ce dossier Apple Notes, répétable, nom comparé sans tenir compte de la casse | la sélection enregistrée dans l’app |
| `--tag name` | uniquement ce tag, répétable, Apple Notes ou Bear | la sélection enregistrée dans l’app |
| `--dry-run` | affiche ce qui serait exporté, n’écrit rien | désactivé |
| `--json`, `--quiet` (`-q`) | comme pour sync | désactivé |

Sans `--folder` ni `--tag`, Apple Notes et Bear exportent la sélection enregistrée dans l’app. Logseq exporte tout le graphe, Contacts toutes les fiches, Messages toutes les conversations, Temps d’écran tous les jours ; les filtres sont ignorés pour eux, avec une note.

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

| liste | ce qu’elle affiche | JSON |
| --- | --- | --- |
| `sources` | chaque app, connectée ou non, avec son nombre d’éléments. Documents n’est pas listé | `[{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]`, avec `pages` pour logseq, `contacts`, et `days` pour `screen-time` |
| `folders` | les dossiers Apple Notes avec leur nombre de notes, indentés selon la profondeur. `--source bear` est une erreur (code 64) | `[{"name": "Work", "notes": 42, "level": 0}]` |
| `tags` | les tags avec leur nombre, Apple Notes par défaut, Bear avec `--source bear` | `[{"name": "journal", "notes": 12}]` |
| `dests` | les dossiers dans lesquels `export --dest` peut écrire, plus le dossier d’export de chaque app | `[{"path": "/Users/me/Backups", "kind": "granted"}]`, où `kind` vaut `granted`, `granted, volume not mounted` ou `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
```

Avec `--json` : un objet par app, nommé `apple-notes`, `bear`, `logseq`, `contacts`, `messages`, `screen-time`, `documents`, chacun `{"connected": true, "lastExport": "2026-09-11 03:00"}` (`null` si jamais exporté) ; `destinations` (chemins) ; `tier` (`full` ou `free`, le déblocage d’Apple Notes) et `freeNotesUsed` ; `contactsTier` et `freeContactsUsed` ; `messagesTier` et `freeConversationsUsed` ; `screenTimeTier` et `freeDaysUsed` ; `appRunning`. Les heures sont locales, au format `yyyy-MM-dd HH:mm`.

## log

Les derniers passages d’export, du plus récent au plus ancien : le même journal que celui de l’app, depuis chaque dossier d’export et chaque dossier `--dest` autorisé. Les dossiers datés créés sous un dossier autorisé ne sont pas lus ; leur historique se trouve dans `<folder>/.exporter/`.

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

| option | effet | par défaut |
| --- | --- | --- |
| `--last N` | nombre de passages | 10 |
| `--json` | un objet par passage | désactivé |

```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` vaut `clean`, `warnings` (pièces jointes manquantes) ou `failures`.

## doctor

Vérifie que l’export sans interface fonctionnera et affiche une ligne par vérification : `ok`, `FAIL` avec une ligne `fix:` en dessous, `warn`, ou `--` pour une information.

```sh
exporter doctor
```

Il vérifie que la base de données de chaque app connectée est lisible et son dossier d’export accessible en écriture, que chaque autorisation de dossier enregistrée est valide, que chaque dossier `--dest` est accessible en écriture, l’index, et la commande installée. Il termine par le niveau de la version, l’état de l’app (ouverte ou non) et le dernier plantage s’il y en a eu un. Le code 0 affiche `all good.`, le code 2 affiche `N problem(s) found.`

## report

Affiche un rapport de diagnostic (version de l’app, macOS et matériel, état des connexions, derniers passages, dernier plantage ; aucun contenu de note) et le copie dans le presse-papiers.

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

| option | effet | par défaut |
| --- | --- | --- |
| `--send` | nous envoie le rapport et affiche `sent.`, ou `offline: queued, will send on the next run or app launch.` | désactivé |
| `--email <addr>` | ajoute votre adresse pour que nous puissions vous répondre | aucun |

## Aide et version

- `exporter help [topic]` : sujets `sync`, `export`, `list`, `status`, `log`, `doctor`, `report`, `cron`, `install`. L’aide d’une commande affiche vos réglages actuels comme valeurs par défaut
- `sync`, `export`, `list`, `log` et `report` acceptent aussi `--help` ou `-h`
- `exporter version` (ou `--version`, `-v`) affiche `exporter 3.24`
- `exporter` seul dans un terminal affiche la présentation générale et se termine avec le code 64

## Sortie JSON

`--json` fonctionne avec `sync`, `export`, `list`, `status` et `log`. La sortie est indentée, avec des clés triées. Pour `sync` et `export`, ajoutez `--quiet` : sans cette option, les lignes de progression et les notes s’affichent sur stdout avant le JSON. `export` affiche un seul objet de résumé, `sync` affiche `{"runs": [...]}` avec un objet par source :

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

Quand l’app est ouverte, `sync` affiche sa ligne unique et aucun JSON. Les erreurs vont sur stderr sous la forme `error: <what happened and what to do>`.

## Codes de sortie

| code | signification |
| --- | --- |
| 0 | ok, y compris un passage interrompu par le quota gratuit |
| 1 | échecs d’export : un élément a échoué, le passage a rencontré une erreur, ou il a sélectionné des éléments sans en écrire aucun |
| 2 | configuration requise : app non connectée, dossier non autorisé, dossier ou tag introuvable, rien à exporter ; `doctor` a trouvé des problèmes ; la commande installée est d’un ancien format ou l’app vers laquelle elle pointe a disparu |
| 64 | utilisation : commande ou option inconnue, valeur manquante ou incorrecte, `--folder` avec Bear, `list folders --source bear`, `exporter` seul dans un terminal |

## Où arrivent les fichiers

`sync` écrit dans le dossier d’export défini pour chaque app dans Exporter, comme `~/Documents/notes` ou `~/Documents/messages` ; `export` écrit dans `--dest`. Un dossier situé au niveau de votre dossier personnel ou juste en dessous, comme `~/Documents` lui-même, reçoit un sous-dossier par app (`notes-export`, `messages-export` et ainsi de suite), et un dossier plus profond est utilisé tel quel. La ligne de résumé (après la flèche) et le `root` du JSON indiquent le dossier réel.

Chaque dossier d’export contient `.exporter/last-export.json` et `.exporter/last-export.md` (le dernier passage) ainsi que `.exporter/history/` (les 50 derniers passages). Apple Notes, Contacts, Messages, Temps d’écran et Documents tiennent aussi `.exporter/files.json`, la liste de chaque fichier écrit par un passage : le passage suivant ne supprime que les fichiers listés ici qu’aucun élément ne produit plus (Temps d’écran ne supprime jamais un fichier de jour). Bear et Logseq suppriment aussi, au passage suivant, les fichiers des notes que vous avez supprimées, renommées ou dont vous avez changé les tags. Les exports Apple Notes et Logseq reçoivent aussi `bases/` avec des vues Obsidian.

## Quota gratuit

La ligne de commande a les mêmes quotas que l’app :

| app | gratuit |
| --- | --- |
| Apple Notes | 100 notes |
| Contacts | 100 contacts |
| Messages | les 10 conversations les plus récentes |
| Temps d’écran | les 10 jours les plus récents lors de la première synchronisation, et seulement ceux-là : les jours suivants demandent le déblocage |
| Documents | les 10 documents modifiés le plus récemment |
| Bear et Logseq | illimité |

Les éléments déjà exportés continuent de se resynchroniser gratuitement ; le quota n’arrête que les nouveaux. Un passage qui l’atteint exporte quand même ce qu’il peut, se termine avec le code 0 et affiche une note (sauf avec `--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` indique le niveau et le nombre utilisé pour Apple Notes, Contacts, Messages et Temps d’écran. Chaque app limitée se débloque avec son propre achat intégré unique dans Exporter, [au prix de votre pays](https://exporter.dev/pricing), sans abonnement ni paiement sur le web. La ligne de commande lit l’achat à chaque passage ; si l’App Store ne répond pas en 5 secondes, le passage continue avec le quota gratuit.

## Planification

`exporter help cron` affiche ces lignes avec le chemin complet de la commande sur votre Mac : utilisez-le, car le PATH de cron peut ne pas inclure le dossier d’installation. Dans une crontab, échappez `%` en `\%` :

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

Pour Carbon Copy Cloner et les autres outils de sauvegarde, lancez `exporter sync` comme script préalable et agissez selon le code de sortie. La commande reste attachée pendant tout l’export, même quand macOS la suspend alors que personne n’est connecté. Tant que l’app tourne, fenêtre ouverte ou fermée, `sync` ne fait rien : la synchronisation en temps réel garde déjà le dossier à jour.

## Serveur MCP

C’est l’app, et non la ligne de commande, qui fait tourner un serveur MCP local permettant à Claude, Cursor, VS Code et d’autres clients de chercher et de lire vos exports, à l’adresse `http://localhost:8744/mcp`. [La page du serveur MCP](https://exporter.dev/docs/mcp) couvre tout à son sujet, du démarrage à ses six outils.

## Dépannage

Lancez d’abord `exporter doctor` ; chaque vérification en échec affiche sa correction. [L’aide](https://exporter.dev/docs/help) couvre aussi les messages de l’app.

- `X is not authorized` : ajoutez le dossier (ou un dossier parent) sur la carte Ligne de commande, puis relancez. `exporter list dests` montre ce qui est autorisé
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (idem pour chaque app) : connectez-la dans Exporter
- `sync` indique qu’Exporter est ouvert : rien à faire, l’app garde le dossier à jour. Utilisez `export --dest` pour une copie séparée
- `no notes were written. run "exporter doctor" to check folders and permissions.` : le passage a sélectionné des notes sans en écrire aucune ; `doctor` vérifie les dossiers et les autorisations
- `bookmark broken` : le dossier a été déplacé, supprimé, ou son volume n’est pas monté. Choisissez-le à nouveau dans l’app
- la commande installée est d’un ancien format, ou cron et les outils de sauvegarde voient le code 19 : collez à nouveau la commande d’installation
- l’app a été déplacée depuis l’installation de la commande : collez à nouveau la commande d’installation
- débloqué, mais le passage indique la version gratuite : la vérification de l’achat attend au plus 5 secondes, puis continue avec le quota gratuit. Relancez
- un problème que doctor ne sait pas expliquer : `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/fr/docs/cli
every page: https://exporter.dev/llms.txt
