سطر أوامر exporter
شغّل عمليات التصدير من Terminal وcron وأدوات النسخ الاحتياطي والوكلاء.
exporter هو تطبيق Exporter على Mac يعمل دون نافذة. يستخدم الاتصالات ومجلدات التصدير والتحديد والإعدادات نفسها التي ضبطتها في التطبيق، ويكتب في سجل التصدير نفسه. يعمل والتطبيق مغلق، ولا يطرح أي سؤال أبدًا: أي نقص يوقف التشغيل برمز الخروج 2 وسطر واحد يقول ما يجب فعله. لنظام macOS فقط.
التثبيت
- ثبّت Exporter من Mac App Store (التنزيل) وافتحه.
- اربط تطبيقًا (ملاحظات Apple أو Bear أو Logseq أو جهات الاتصال أو الرسائل أو مدة استخدام الجهاز) أو مجلد مستندات، واختر مجلد التصدير الخاص به (البدء). لا يمكن منح هذه الأذونات إلا داخل التطبيق.
- في بطاقة سطر الأوامر في التطبيق، اضغط «نسخ أمر التثبيت» والصقه مرة واحدة في Terminal.
التطبيق يعمل داخل بيئة معزولة (sandbox) ولا يمكنه الكتابة في PATH لديك، ولهذا فالخطوة الأخيرة لصق. يثبّت السطر exporter في /opt/homebrew/bin إن كان ذلك المجلد موجودًا ومملوكًا لك (دون sudo)، وإلا ففي /usr/local/bin باستخدام sudo. لصقه مرة أخرى آمن، فهو يستبدل ما كان موجودًا. ويطبع exporter help install السطر الخاص بجهاز Mac لديك.
المصادر
يقبل --source واحدًا من هذه:
| المصدر | يُقبل أيضًا | يكتب |
|---|---|---|
apple |
apple-notes، applenotes، notes |
markdown أو html |
bear |
markdown أو html | |
logseq |
markdown دائمًا | |
contacts |
apple-contacts، addressbook |
markdown دائمًا |
messages |
imessage، chats، conversations |
markdown دائمًا |
screentime |
screen-time، usage |
markdown دائمًا، ملف لكل يوم |
documents |
docs، files، pdf |
الصيغ المحدَّدة في بطاقة المستندات |
الصيغ
يقبل --format القيمة markdown (أو md) أو html، ولا تهم حالة الأحرف. أي قيمة أخرى توقف التشغيل بالرسالة error: --format pdf: expected markdown | html والرمز 64.
- من دونه، يكتب
syncكل تطبيق بالصيغة المضبوطة في بطاقته (لكل من ملاحظات Apple وBear إعداده الخاص)، ويكتبexportبحسب إعداد التطبيق الذي يصدّره، ويعرضexporter help syncوexporter help exportالإعدادات الحالية - Logseq وجهات الاتصال والرسائل ومدة استخدام الجهاز بصيغة markdown دائمًا، والمستندات تكتب الصيغ المحدَّدة في بطاقتها، لذا يُتجاهل
--format htmlلهذه المصادر مع ملاحظة:note: logseq export is always markdown, so --format is ignored for this source. - تكتب ملاحظات Apple صفحة
.htmlلكل ملاحظة (صيغة HTML)، والمرفقات منسوخة إلىattachments/بجوارها ومرتبطة بها، بلا ترويسة. أما HTML في Bear فهو نص الملاحظة العادي داخل<pre>، بلا تنسيق، مع بقاء مراجع المرفقات نصًا بصيغة Markdown: تُنسخ الملفات ولا تُربط - لا يقرأ خادم MCP إلا ملفات markdown، لذا فالتصدير الذي يقتصر على HTML غير مرئي له
- تكتب ملاحظات Apple وBear صيغة واحدة في كل تشغيل، والمستندات وحدها تكتب الصيغتين في مزامنة واحدة. لا يحذف التشغيل إلا الملفات القديمة من صيغته هو، لذا فإن التبديل يترك ملفات الصيغة الأخرى في المجلد. وللحصول على الصيغتين، خصّص لكل منهما مجلدًا:
exporter export --dest ~/Backups/notes-md --format markdown
exporter export --dest ~/Backups/notes-html --format html
sync
يشغّل التصدير الذي ضبطته في التطبيق، مرة واحدة، تدريجيًا، إلى مجلدات التصدير في التطبيق.
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
| الخيار | ما يفعله | الافتراضي |
|---|---|---|
--source <source> |
هذا التطبيق فقط، ويمكن تكراره | كل تطبيق مرتبط، وتُتخطّى التطبيقات غير المرتبطة |
--format markdown|html |
لهذا التشغيل فقط، ويبقى إعداد التطبيق كما هو. يصل الناتج إلى مجلد التصدير نفسه الذي فيه الصيغة الأخرى، وللاحتفاظ بالاثنتين صدّر كلًّا منهما إلى مجلده الخاص بواسطة export --dest |
إعداد التطبيق |
--full |
يعيد تصدير كل شيء. لا يحذف قبل الكتابة إلا الملفات التي كتبها Exporter، وكل ما عداها في مجلد التصدير يبقى | متوقف |
--json |
ملخص قابل للقراءة آليًا | متوقف |
--quiet، -q |
الأخطاء فقط | متوقف |
exporter sync --source apple
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
سطر الملخص هو <source>: <succeeded> of <selected> exported، ثم عند وجودها N failed، وN removed (ملفات عناصر حُذفت أو أُعيدت تسميتها أو نُقلت)، وN attachment issues، ثم المدة، والصيغة، والمجلد الذي كُتب فيه.
إذا كان التطبيق يعمل، فإن sync لا يصدّر شيئًا، ويخرج بالرمز 0 ويطبع Exporter is running: real-time sync is live, the export root is already current.
export
تصدير لمرة واحدة إلى مجلد تختاره، للقطات والبرامج النصية. يعمل بلا مشكلة والتطبيق مفتوح.
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
| الخيار | ما يفعله | الافتراضي |
|---|---|---|
--dest <folder> |
مطلوب. يجب أن يكون داخل مجلد مُنح الإذن في بطاقة سطر الأوامر في التطبيق (عبر إضافة مجلد). الإذن على ~/Backups يشمل كل مجلد تحته |
لا شيء |
--source <source> |
التطبيق المراد تصديره | apple |
--format markdown|html |
الصيغة لهذا التشغيل | إعداد التطبيق |
--organize folders|tags|smart |
لملاحظات Apple فقط: كيف تُرتَّب الملاحظات في المجلدات | إعداد التطبيق |
--folder "Name" |
هذا المجلد من ملاحظات Apple فقط، ويمكن تكراره، ويُطابَق الاسم دون مراعاة حالة الأحرف | التحديد المحفوظ في التطبيق |
--tag name |
هذا الوسم فقط، ويمكن تكراره، لملاحظات Apple أو Bear | التحديد المحفوظ في التطبيق |
--dry-run |
يطبع ما سيُصدَّر، ولا يكتب شيئًا | متوقف |
--json، --quiet (-q) |
كما في sync | متوقف |
دون --folder أو --tag، تصدّر ملاحظات Apple وBear التحديد المحفوظ في التطبيق. ويصدّر Logseq الرسم البياني كله، وجهات الاتصال كل البطاقات، والرسائل كل المحادثات، ومدة استخدام الجهاز كل الأيام، وتُتجاهل عوامل التصفية لهذه المصادر مع ملاحظة.
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]
| القائمة | ما تعرضه | JSON |
|---|---|---|
sources |
كل تطبيق، مرتبطًا كان أم لا، مع عدده. المستندات لا تُدرج | [{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]، مع pages لـ logseq، وcontacts، وdays لـ screen-time |
folders |
مجلدات ملاحظات Apple مع أعداد الملاحظات، مزاحة حسب العمق. و--source bear خطأ (الخروج 64) |
[{"name": "Work", "notes": 42, "level": 0}] |
tags |
الوسوم مع أعدادها، لملاحظات Apple افتراضيًا، ولـ Bear مع --source bear |
[{"name": "journal", "notes": 12}] |
dests |
المجلدات التي يمكن أن يكتب فيها export --dest، إضافة إلى مجلد التصدير لكل تطبيق |
[{"path": "/Users/me/Backups", "kind": "granted"}]، حيث kind هو granted أو granted, volume not mounted أو 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
مع --json: كائن لكل تطبيق، باسم apple-notes وbear وlogseq وcontacts وmessages وscreen-time وdocuments، وكل منها {"connected": true, "lastExport": "2026-09-11 03:00"} (وتكون null إن لم يُصدَّر قط)، وdestinations (المسارات)، وtier (full أو free، أي فتح قفل ملاحظات Apple) وfreeNotesUsed، وcontactsTier وfreeContactsUsed، وmessagesTier وfreeConversationsUsed، وscreenTimeTier وfreeDaysUsed، وappRunning. الأوقات محلية، بالصيغة yyyy-MM-dd HH:mm.
log
أحدث عمليات التصدير، الأحدث أولًا: السجل نفسه الذي يعرضه التطبيق، من كل مجلد تصدير وكل مجلد --dest مُنح الإذن. المجلدات المؤرَّخة المُنشأة تحت مجلد مُنح الإذن لا تُقرأ، وسجلّها في <folder>/.exporter/.
exporter log [--last N] [--json]
| الخيار | ما يفعله | الافتراضي |
|---|---|---|
--last N |
عدد عمليات التشغيل | 10 |
--json |
كائن لكل تشغيل | متوقف |
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 (مرفقات مفقودة) أو failures.
doctor
يتحقق من أن التصدير دون واجهة سيعمل ويطبع سطرًا لكل فحص: ok، أو FAIL وتحته سطر fix:، أو warn، أو -- للمعلومات.
exporter doctor
يتحقق من أن قاعدة بيانات كل تطبيق مرتبط قابلة للقراءة ومجلد التصدير الخاص به قابل للكتابة، ومن أن كل إذن مجلد محفوظ لا يزال صالحًا، ومن أن كل مجلد --dest قابل للكتابة، ومن الفهرس، ومن الأمر المثبَّت. وينتهي بمستوى الإصدار، وبما إذا كان التطبيق يعمل، وبآخر انهيار إن وُجد. الخروج 0 يطبع all good.، والخروج 2 يطبع N problem(s) found.
report
يطبع تقريرًا تشخيصيًا (إصدار التطبيق، وmacOS والعتاد، وحالة الاتصالات، وعمليات التشغيل الأخيرة، وآخر انهيار، دون أي محتوى من الملاحظات) وينسخه إلى الحافظة.
exporter report [--send] [--email <addr>]
| الخيار | ما يفعله | الافتراضي |
|---|---|---|
--send |
يرسل التقرير إلينا ويطبع sent.، أو offline: queued, will send on the next run or app launch. |
متوقف |
--email <addr> |
يضيف عنوانك لنتمكن من الرد | لا شيء |
التعليمات والإصدار
exporter help [topic]: المواضيعsyncوexportوlistوstatusوlogوdoctorوreportوcronوinstall. وتعرض تعليمات أي أمر إعداداتك الحالية كقيم افتراضية- تقبل
syncوexportوlistوlogوreportأيضًا--helpأو-h - يطبع
exporter version(أو--version،-v) النصexporter 3.24 - تشغيل
exporterوحده في الطرفية يطبع نظرة عامة ويخرج بالرمز 64
مخرجات JSON
يعمل --json مع sync وexport وlist وstatus وlog. تُطبع المخرجات منسَّقة مع مفاتيح مرتبة. ومع sync وexport أضف --quiet: فمن دونه تُطبع أسطر التقدّم والملاحظات على stdout قبل JSON. يطبع export كائن ملخص واحدًا، ويطبع sync القيمة {"runs": [...]} مع كائن لكل مصدر:
{
"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
}
ما دام التطبيق يعمل، يطبع sync سطره الوحيد دون JSON. وتذهب الأخطاء إلى stderr بالشكل error: <what happened and what to do>.
رموز الخروج
| الرمز | المعنى |
|---|---|
| 0 | نجاح، بما في ذلك تشغيل أوقفته الحصة المجانية قبل اكتماله |
| 1 | إخفاقات في التصدير: فشل عنصر، أو واجه التشغيل خطأ، أو حدّد عناصر ولم يكتب أيًّا منها |
| 2 | يحتاج إلى إعداد: التطبيق غير مرتبط، أو المجلد غير ممنوح الإذن، أو المجلد أو الوسم غير موجود، أو لا شيء للتصدير، أو وجد doctor مشكلات، أو الأمر المثبَّت بتنسيق قديم أو التطبيق الذي يشير إليه لم يعد موجودًا |
| 64 | الاستخدام: أمر أو خيار غير معروف، أو قيمة مفقودة أو خاطئة، أو --folder مع Bear، أو list folders --source bear، أو exporter وحده في الطرفية |
أين تُحفظ الملفات
يكتب sync في مجلد التصدير المضبوط لكل تطبيق في Exporter، مثل ~/Documents/notes أو ~/Documents/messages، ويكتب export في --dest. المجلد الموجود في مستوى مجلد الإقامة أو أدنى منه بمستوى واحد، مثل ~/Documents نفسه، يحصل على مجلد فرعي لكل تطبيق (notes-export وmessages-export وهكذا)، أما المجلد الأعمق فيُستخدم كما هو. ويعرض سطر الملخص (بعد السهم) وroot في JSON المجلد الفعلي.
يحتوي كل مجلد تصدير على .exporter/last-export.json و.exporter/last-export.md (آخر تشغيل) و.exporter/history/ (آخر 50 تشغيلًا). وتحتفظ ملاحظات Apple وجهات الاتصال والرسائل ومدة استخدام الجهاز والمستندات أيضًا بالملف .exporter/files.json، وفيه كل ملف كتبه أي تشغيل: لا يحذف التشغيل التالي إلا الملفات المدرجة هناك التي لم يعد أي عنصر يُنتجها (ولا تحذف مدة استخدام الجهاز ملف يوم أبدًا). ويحذف Bear وLogseq أيضًا في التشغيل التالي ملفات الملاحظات التي حذفتها أو أعدت تسميتها أو غيّرت وسومها. وتحصل صادرات ملاحظات Apple وLogseq أيضًا على bases/ مع عروض Obsidian.
الحصة المجانية
لسطر الأوامر الحصص نفسها التي في التطبيق:
| التطبيق | المجاني |
|---|---|
| ملاحظات Apple | 100 ملاحظة |
| جهات الاتصال | 100 جهة اتصال |
| الرسائل | أحدث 10 محادثات |
| مدة استخدام الجهاز | أحدث 10 أيام عند أول مزامنة، وهي وحدها: الأيام اللاحقة تحتاج إلى فتح القفل |
| المستندات | أحدث 10 مستندات معدّلة |
| Bear وLogseq | بلا حدود |
العناصر المُصدَّرة من قبل تواصل إعادة المزامنة مجانًا، والحصة لا توقف إلا العناصر الجديدة. التشغيل الذي يبلغها يصدّر ما يُسمح له به، ويخرج بالرمز 0، ويطبع ملاحظة (لا تظهر مع --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 المستوى والعدد المستخدم لملاحظات Apple وجهات الاتصال والرسائل ومدة استخدام الجهاز. يُفتح قفل كل تطبيق محدود بشراء خاص به لمرة واحدة داخل Exporter، بسعر يُحدَّد لكل بلد، بلا اشتراك وبلا دفع عبر الويب. يقرأ سطر الأوامر حالة الشراء في كل تشغيل، وإذا لم يستجب App Store خلال 5 ثوانٍ، يستمر التشغيل على الحصة المجانية.
الجدولة
يطبع exporter help cron هذه الأسطر مع المسار الكامل للأمر على جهاز Mac لديك: استخدمه، لأن PATH الخاص بـ cron قد لا يتضمن مجلد التثبيت. في ملف crontab، اكتب % بالشكل \%:
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
لـ Carbon Copy Cloner وأدوات النسخ الاحتياطي الأخرى، شغّل exporter sync كبرنامج نصي تمهيدي (pre-flight) وتفرّع حسب رمز الخروج. يبقى الأمر متصلًا طوال عملية التصدير، حتى حين يعلّقه macOS دون أن يكون أحد مسجّل الدخول. وما دام التطبيق يعمل، ونافذته مفتوحة أو مغلقة، فإن sync لا يفعل شيئًا: المزامنة الفورية تبقي المجلد محدَّثًا أصلًا.
خادم MCP
التطبيق، لا سطر الأوامر، هو من يشغّل خادم MCP محليًا يتيح لـ Claude وCursor وVS Code وغيرها من العملاء البحث في صادراتك وقراءتها، على http://localhost:8744/mcp. وتغطي صفحة خادم MCP كل ما يتعلق به، من تشغيله إلى أدواته الست.
حل المشكلات
شغّل exporter doctor أولًا، فكل فحص فاشل يطبع طريقة إصلاحه. وتغطي المساعدة رسائل التطبيق أيضًا.
X is not authorized: أضف المجلد (أو مجلدًا أعلى منه) في بطاقة سطر الأوامر، ثم أعد التشغيل. ويعرضexporter list destsما مُنح الإذنapple notes is not set up. open Exporter and connect Apple Notes + an export folder.(والأمر نفسه لكل تطبيق): اربطه في Exporter- يطبع
syncأن Exporter يعمل: لا شيء عليك فعله، فالتطبيق يبقي المجلد محدَّثًا. استخدمexport --destلنسخة منفصلة no notes were written. run "exporter doctor" to check folders and permissions.: حدّد التشغيل ملاحظات ولم يكتب أيًّا منها، ويتحققdoctorمن المجلدات والأذوناتbookmark broken: نُقل المجلد، أو حُذف، أو أن وحدة التخزين الخاصة به غير مركّبة. اختره من جديد في التطبيق- الأمر المثبَّت بتنسيق قديم، أو ترى cron وأدوات النسخ الاحتياطي رمز الخروج 19: الصق أمر التثبيت مرة أخرى
- نُقل التطبيق منذ أن ثبّتّ الأمر: الصق أمر التثبيت مرة أخرى
- فتحت القفل لكن التشغيل يقول free: ينتظر فحص الشراء 5 ثوانٍ على الأكثر، ثم يستمر على الحصة المجانية. شغّله مرة أخرى
- مشكلة لا يستطيع doctor تفسيرها:
exporter report --send --email you@example.com