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
- Installez Exporter depuis le Mac App Store (télécharger) et ouvrez-le.
- 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). Ces autorisations ne peuvent être accordées que dans l’app.
- 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) etexportécrit selon le réglage de l’app qu’il exporte ;exporter help syncetexporter help exportaffichent 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 htmlest donc ignoré, avec une note :note: logseq export is always markdown, so --format is ignored for this source. - Apple Notes écrit une page
.htmlpar note (le format HTML), pièces jointes copiées dansattachments/à 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 :
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.
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é |
exporter sync --source apple
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.
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.
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]
| 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) |
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
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/.
exporter log [--last N] [--json]
| option | effet | par défaut |
|---|---|---|
--last N |
nombre de passages | 10 |
--json |
un objet par passage | désactivé |
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.
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.
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]: sujetssync,export,list,status,log,doctor,report,cron,install. L’aide d’une commande affiche vos réglages actuels comme valeurs par défautsync,export,list,logetreportacceptent aussi--helpou-hexporter version(ou--version,-v) afficheexporter 3.24exporterseul 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 :
{
"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) :
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, 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 \% :
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 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 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 destsmontre 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 Exportersyncindique qu’Exporter est ouvert : rien à faire, l’app garde le dossier à jour. Utilisezexport --destpour une copie séparéeno notes were written. run "exporter doctor" to check folders and permissions.: le passage a sélectionné des notes sans en écrire aucune ;doctorvérifie les dossiers et les autorisationsbookmark 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