Dòng lệnh exporter
Chạy các lần xuất của bạn từ Terminal, cron, công cụ sao lưu và agent.
exporter là ứng dụng Exporter trên Mac chạy không có cửa sổ. Nó dùng cùng các kết nối, thư mục xuất, lựa chọn và cài đặt mà bạn thiết lập trong ứng dụng, và ghi vào cùng nhật ký xuất. Nó hoạt động khi ứng dụng đang đóng và không bao giờ hỏi: thiếu bất cứ thứ gì, lần chạy sẽ dừng với mã thoát 2 và một dòng cho biết cần làm gì. Chỉ dành cho macOS.
Cài đặt
- Cài Exporter từ Mac App Store (tải về) và mở nó.
- Kết nối một ứng dụng (Apple Notes, Bear, Logseq, Danh bạ, Tin nhắn hoặc Thời gian sử dụng) hoặc một thư mục Tài liệu, và chọn thư mục xuất của nó (bắt đầu). Các quyền này chỉ cấp được trong ứng dụng.
- Trên thẻ Dòng lệnh của ứng dụng, nhấn “sao chép lệnh cài đặt” và dán nó một lần trong Terminal.
Ứng dụng chạy trong sandbox và không thể ghi vào PATH của bạn, đó là lý do bước cuối là một thao tác dán. Dòng lệnh này cài exporter vào /opt/homebrew/bin khi thư mục đó tồn tại và thuộc về bạn (không cần sudo), nếu không thì vào /usr/local/bin với sudo. Dán lại cũng an toàn; nó thay thế bất cứ thứ gì đã có ở đó. exporter help install in ra dòng lệnh dành cho Mac của bạn.
Nguồn
--source nhận một trong các giá trị sau:
| nguồn | cũng được chấp nhận | ghi ra |
|---|---|---|
apple |
apple-notes, applenotes, notes |
markdown hoặc html |
bear |
markdown hoặc html | |
logseq |
luôn là markdown | |
contacts |
apple-contacts, addressbook |
luôn là markdown |
messages |
imessage, chats, conversations |
luôn là markdown |
screentime |
screen-time, usage |
luôn là markdown, mỗi ngày một tệp |
documents |
docs, files, pdf |
các định dạng được chọn trên thẻ Documents |
Định dạng
--format nhận markdown (hoặc md) hay html; không phân biệt hoa thường. Giá trị khác sẽ dừng với error: --format pdf: expected markdown | html và mã thoát 64.
- khi không có cờ này,
syncghi mỗi ứng dụng theo định dạng đặt trên thẻ của nó (Apple Notes và Bear mỗi ứng dụng có cài đặt riêng) vàexportghi theo cài đặt của ứng dụng được xuất;exporter help syncvàexporter help exporthiển thị các cài đặt hiện tại - Logseq, Danh bạ, Tin nhắn và Thời gian sử dụng luôn là markdown, còn Tài liệu ghi các định dạng được chọn trên thẻ của nó, nên với chúng
--format htmlbị bỏ qua kèm một ghi chú:note: logseq export is always markdown, so --format is ignored for this source. - Apple Notes ghi mỗi ghi chú một trang
.html(định dạng HTML), tệp đính kèm được sao chép vàoattachments/cạnh trang và được liên kết, không có front matter. HTML của Bear là văn bản thuần của ghi chú đặt trong thẻ<pre>, không có định dạng trình bày, và các tham chiếu tệp đính kèm vẫn là văn bản Markdown: các tệp được sao chép, không được liên kết - máy chủ MCP chỉ đọc tệp markdown, nên một bản xuất chỉ có HTML thì máy chủ không thấy
- Apple Notes và Bear ghi một định dạng mỗi lần chạy; chỉ Tài liệu ghi cả hai trong một lần đồng bộ. Một lần chạy chỉ xóa các tệp cũ cùng định dạng của nó, nên khi chuyển định dạng, các tệp của định dạng kia vẫn nằm lại trong thư mục. Để có cả hai định dạng, hãy dành cho mỗi định dạng một thư mục riêng:
exporter export --dest ~/Backups/notes-md --format markdown
exporter export --dest ~/Backups/notes-html --format html
sync
Chạy bản xuất bạn đã cấu hình trong ứng dụng, một lần, theo kiểu tăng dần, vào các thư mục xuất của ứng dụng.
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
| cờ | tác dụng | mặc định |
|---|---|---|
--source <source> |
chỉ ứng dụng này, lặp lại được | mọi ứng dụng đã kết nối; ứng dụng chưa kết nối bị bỏ qua |
--format markdown|html |
chỉ cho lần chạy này, cài đặt trong ứng dụng không đổi. Kết quả nằm trong cùng thư mục xuất với định dạng kia; để giữ cả hai, hãy xuất mỗi định dạng vào thư mục riêng bằng export --dest |
cài đặt trong ứng dụng |
--full |
xuất lại mọi thứ. Trước khi ghi, nó chỉ xóa các tệp Exporter đã ghi; mọi thứ khác trong thư mục xuất vẫn được giữ | tắt |
--json |
bản tóm tắt máy đọc được | tắt |
--quiet, -q |
chỉ lỗi | tắt |
exporter sync --source apple
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
Dòng tóm tắt là <source>: <succeeded> of <selected> exported, rồi nếu có thì N failed, N removed (tệp của những mục đã bị xóa, đổi tên hoặc di chuyển), N attachment issues, rồi đến thời lượng, định dạng và thư mục được ghi.
Nếu ứng dụng đang chạy, sync không xuất gì, thoát với mã 0 và in ra Exporter is running: real-time sync is live, the export root is already current.
export
Một lần xuất đơn lẻ vào thư mục bạn chọn, dành cho bản chụp và script. Nó chạy bình thường khi ứng dụng đang mở.
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
| cờ | tác dụng | mặc định |
|---|---|---|
--dest <folder> |
bắt buộc. Phải nằm trong một thư mục đã được cấp quyền trên thẻ Dòng lệnh của ứng dụng (“thêm thư mục…”). Quyền cấp cho ~/Backups bao gồm mọi thư mục bên dưới nó |
không có |
--source <source> |
ứng dụng cần xuất | apple |
--format markdown|html |
định dạng cho lần chạy này | cài đặt trong ứng dụng |
--organize folders|tags|smart |
chỉ Apple Notes: cách sắp xếp ghi chú vào thư mục | cài đặt trong ứng dụng |
--folder "Name" |
chỉ thư mục Apple Notes này, lặp lại được, so khớp tên không phân biệt hoa thường | lựa chọn đã lưu trong ứng dụng |
--tag name |
chỉ thẻ này, lặp lại được, Apple Notes hoặc Bear | lựa chọn đã lưu trong ứng dụng |
--dry-run |
in ra những gì sẽ được xuất, không ghi gì | tắt |
--json, --quiet (-q) |
như với sync | tắt |
Khi không có --folder hay --tag, Apple Notes và Bear xuất lựa chọn đã lưu trong ứng dụng. Logseq xuất toàn bộ graph, Danh bạ mọi thẻ, Tin nhắn mọi cuộc trò chuyện, Thời gian sử dụng mọi ngày; bộ lọc bị bỏ qua với chúng, kèm một ghi chú.
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]
| danh sách | hiển thị gì | JSON |
|---|---|---|
sources |
mỗi ứng dụng, đã kết nối hay chưa, kèm số lượng. Documents không được liệt kê | [{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}], với pages cho logseq, contacts, và days cho screen-time |
folders |
các thư mục Apple Notes kèm số ghi chú, thụt lề theo độ sâu. --source bear là lỗi (thoát 64) |
[{"name": "Work", "notes": 42, "level": 0}] |
tags |
các thẻ kèm số lượng, mặc định là Apple Notes, Bear với --source bear |
[{"name": "journal", "notes": 12}] |
dests |
các thư mục mà export --dest được ghi vào, cùng thư mục xuất của từng ứng dụng |
[{"path": "/Users/me/Backups", "kind": "granted"}], trong đó kind là granted, granted, volume not mounted hoặc 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
Với --json: mỗi ứng dụng một đối tượng, tên là apple-notes, bear, logseq, contacts, messages, screen-time, documents, mỗi đối tượng là {"connected": true, "lastExport": "2026-09-11 03:00"} (null khi chưa từng xuất); destinations (các đường dẫn); tier (full hoặc free, gói mở khóa Apple Notes) và freeNotesUsed; contactsTier và freeContactsUsed; messagesTier và freeConversationsUsed; screenTimeTier và freeDaysUsed; appRunning. Thời gian là giờ địa phương, yyyy-MM-dd HH:mm.
log
Các lần xuất gần đây, mới nhất trước: cùng nhật ký mà ứng dụng hiển thị, từ mọi thư mục xuất và mọi thư mục --dest đã được cấp quyền. Các thư mục có ghi ngày được tạo bên dưới một thư mục đã cấp quyền thì không được đọc; bản ghi của chúng nằm trong <folder>/.exporter/.
exporter log [--last N] [--json]
| cờ | tác dụng | mặc định |
|---|---|---|
--last N |
bao nhiêu lần chạy | 10 |
--json |
mỗi lần chạy một đối tượng | tắt |
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 là clean, warnings (thiếu tệp đính kèm) hoặc failures.
doctor
Kiểm tra xem việc xuất không giao diện có hoạt động không và in một dòng cho mỗi mục kiểm tra: ok, FAIL kèm một dòng fix: bên dưới, warn, hoặc -- cho thông tin.
exporter doctor
Nó kiểm tra rằng cơ sở dữ liệu của mỗi ứng dụng đã kết nối đọc được và thư mục xuất của nó ghi được, rằng mọi quyền truy cập thư mục đã lưu đều hợp lệ, rằng mọi thư mục --dest ghi được, kiểm tra chỉ mục, và lệnh đã cài. Cuối cùng là gói phiên bản, ứng dụng có đang chạy không, và lần gặp sự cố gần nhất nếu có. Mã thoát 0 in ra all good., mã thoát 2 in ra N problem(s) found.
report
In ra một báo cáo chẩn đoán (phiên bản ứng dụng, macOS và phần cứng, trạng thái kết nối, các lần chạy gần đây, lần gặp sự cố gần nhất; không có nội dung ghi chú) và sao chép nó vào bảng nhớ tạm.
exporter report [--send] [--email <addr>]
| cờ | tác dụng | mặc định |
|---|---|---|
--send |
gửi báo cáo cho chúng tôi và in ra sent., hoặc offline: queued, will send on the next run or app launch. |
tắt |
--email <addr> |
thêm địa chỉ của bạn để chúng tôi trả lời | không có |
help và version
exporter help [topic]: các chủ đềsync,export,list,status,log,doctor,report,cron,install. Trợ giúp cho một lệnh hiển thị cài đặt hiện tại của bạn làm giá trị mặc địnhsync,export,list,logvàreportcũng nhận--helphoặc-hexporter version(hoặc--version,-v) in raexporter 3.24- chỉ gõ
exportertrong terminal sẽ in ra phần tổng quan và thoát với mã 64
Đầu ra JSON
--json dùng được với sync, export, list, status và log. Đầu ra được định dạng đẹp với các khóa được sắp xếp. Với sync và export, hãy thêm --quiet: nếu không, các dòng tiến độ và ghi chú được in ra stdout trước JSON. export in ra một đối tượng tóm tắt, sync in ra {"runs": [...]} với mỗi nguồn một mục:
{
"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
}
Khi ứng dụng đang chạy, sync in ra một dòng của nó và không có JSON. Lỗi được ghi ra stderr dưới dạng error: <what happened and what to do>.
Mã thoát
| mã | ý nghĩa |
|---|---|
| 0 | ổn, kể cả lần chạy bị giới hạn miễn phí cắt ngắn |
| 1 | lỗi xuất: một mục bị lỗi, lần chạy gặp lỗi, hoặc đã chọn mục mà không ghi được mục nào |
| 2 | cần thiết lập: ứng dụng chưa kết nối, thư mục chưa được cấp quyền, không tìm thấy thư mục hoặc thẻ, không có gì để xuất; doctor phát hiện vấn đề; lệnh đã cài có định dạng cũ hoặc ứng dụng mà nó trỏ tới không còn |
| 64 | cách dùng: lệnh hoặc cờ không xác định, giá trị thiếu hoặc sai, --folder với Bear, list folders --source bear, chỉ gõ exporter trong terminal |
Các tệp được lưu ở đâu
sync ghi vào thư mục xuất được đặt cho mỗi ứng dụng trong Exporter, như ~/Documents/notes hay ~/Documents/messages; export ghi vào --dest. Một thư mục ở cấp thư mục người dùng hoặc thấp hơn một cấp, như chính ~/Documents, sẽ có một thư mục con cho từng ứng dụng (notes-export, messages-export, v.v.), còn thư mục sâu hơn được dùng nguyên như vậy. Dòng tóm tắt (sau mũi tên) và root trong JSON cho biết thư mục thật.
Mỗi thư mục xuất chứa .exporter/last-export.json và .exporter/last-export.md (lần chạy gần nhất) và .exporter/history/ (50 lần chạy gần nhất). Apple Notes, Danh bạ, Tin nhắn, Thời gian sử dụng và Tài liệu còn giữ .exporter/files.json, mọi tệp mà một lần chạy đã ghi: lần chạy tiếp theo chỉ xóa những tệp có trong danh sách đó mà không còn mục nào tạo ra nữa (Thời gian sử dụng không bao giờ xóa tệp của một ngày). Bear và Logseq cũng xóa tệp của những ghi chú bạn đã xóa, đổi tên hoặc đổi thẻ trong lần chạy tiếp theo. Bản xuất Apple Notes và Logseq còn có bases/ với các chế độ xem Obsidian.
Phần miễn phí
Dòng lệnh có cùng giới hạn miễn phí như ứng dụng:
| ứng dụng | miễn phí |
|---|---|
| Apple Notes | 100 ghi chú |
| Danh bạ | 100 liên hệ |
| Tin nhắn | 10 cuộc trò chuyện gần nhất |
| Thời gian sử dụng | 10 ngày gần nhất ở lần đồng bộ đầu tiên, và chỉ những ngày đó: các ngày sau cần mở khóa |
| Tài liệu | 10 tài liệu được sửa gần nhất |
| Bear và Logseq | không giới hạn |
Các mục đã xuất tiếp tục đồng bộ lại miễn phí; giới hạn chỉ chặn các mục mới. Một lần chạy chạm tới giới hạn vẫn xuất những gì được phép, thoát với mã 0, và in ra một ghi chú (không in khi dùng --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 có gói và số lượng đã dùng cho Apple Notes, Danh bạ, Tin nhắn và Thời gian sử dụng. Mỗi ứng dụng có giới hạn được mở khóa bằng một lần mua riêng trong ứng dụng Exporter, giá theo từng quốc gia, không có gói đăng ký và không thanh toán trên web. Dòng lệnh đọc giao dịch mua ở mỗi lần chạy; nếu App Store không trả lời trong vòng 5 giây, lần chạy tiếp tục với phần miễn phí.
Lập lịch
exporter help cron in ra các dòng này với đường dẫn đầy đủ của lệnh trên Mac của bạn: hãy dùng đường dẫn đó, vì PATH của cron có thể không bao gồm thư mục cài đặt. Trong crontab, hãy thoát % thành \%:
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
Với Carbon Copy Cloner và các công cụ sao lưu khác, hãy chạy exporter sync như một script chạy trước và rẽ nhánh theo mã thoát. Lệnh giữ kết nối trong suốt quá trình xuất, kể cả khi macOS tạm dừng nó lúc không có ai đăng nhập. Khi ứng dụng đang chạy, dù cửa sổ mở hay đóng, sync không làm gì: đồng bộ theo thời gian thực đã giữ thư mục luôn cập nhật.
Máy chủ MCP
Chính ứng dụng, không phải dòng lệnh, chạy một máy chủ MCP cục bộ cho phép Claude, Cursor, VS Code và các ứng dụng khách khác tìm kiếm và đọc bản xuất của bạn, tại http://localhost:8744/mcp. Trang máy chủ MCP trình bày mọi thứ về nó, từ cách khởi động đến sáu công cụ của nó.
Khắc phục sự cố
Hãy chạy exporter doctor trước; mọi mục kiểm tra thất bại đều in ra cách khắc phục. Trợ giúp cũng giải thích các thông báo của ứng dụng.
X is not authorized: thêm thư mục (hoặc một thư mục cha) trên thẻ Dòng lệnh, rồi chạy lại.exporter list destscho biết những gì đã được cấp quyềnapple notes is not set up. open Exporter and connect Apple Notes + an export folder.(tương tự cho mỗi ứng dụng): kết nối nó trong Exportersyncbáo rằng Exporter đang chạy: không cần làm gì, ứng dụng giữ thư mục luôn cập nhật. Dùngexport --destđể có một bản sao riêngno notes were written. run "exporter doctor" to check folders and permissions.: lần chạy đã chọn ghi chú nhưng không ghi được gì;doctorkiểm tra thư mục và quyền truy cậpbookmark broken: thư mục đã bị di chuyển, xóa, hoặc ổ đĩa chứa nó chưa được gắn. Hãy chọn lại nó trong ứng dụng- lệnh đã cài có định dạng cũ, hoặc cron và công cụ sao lưu thấy mã thoát 19: dán lại lệnh cài đặt
- ứng dụng đã bị di chuyển kể từ khi bạn cài lệnh: dán lại lệnh cài đặt
- đã mở khóa nhưng lần chạy báo miễn phí: việc kiểm tra giao dịch mua chờ tối đa 5 giây, rồi tiếp tục với phần miễn phí. Hãy chạy lại
- một vấn đề mà doctor không giải thích được:
exporter report --send --email you@example.com