以终为始:备份文件时的小弯路
有一些早期的咨询板书留在了一台小米平板 6 上,那时候用过盗版的 Concepts,最近考虑把它里面的数据掏出来,同时工具也换成 iPad 上的正版。
导出有两个思路:
- 走 App 内置能力,导出 PDF/png 等通用格式文件,接受损失元数据和后期二次编辑的能力
- 导出原始
.concepts文件,保留所有元数据和后期编辑能力,但目前仅限 Android 端 Concepts 支持再次导入
我选后者。当时积累了几十个板书,逐个手动导出通用文件非常难以接受,而且我乐意付出一点探索的时间来换取前期业务积累下的尽可能多的信息。

插句题外话,代入非技术背景用户的视角,不得不说 Concepts 对数据位置的交互处理让我非常难以理解,直接把 App Storage 和 Internal Storage 并列放置,最下面还加了个 Extras(默认只有一个 Recently Deleted),为什么不把前两个合并起来呢?直接用技术名词来命名这两个位置,对目标用户(设计师群体)完全没有信息增量啊,哪怕加个强提示来区分一下呢?这方面纯纯写作的处理我个人感觉就要好得多。
我之前默认把板书都建在了 App Storage 下,也就是 /data/data/com.tophatch.concepts 里,所以 adb 和基于 adb 的工具都读不到:
pipa:/ $ ls -al
total 96
drwxr-xr-x 30 root root 747 2009-01-01 08:00 .
drwxr-xr-x 30 root root 747 2009-01-01 08:00 ..
...
drwxrwx--x 62 system system 4096 2026-08-27 15:49 data
d????????? ? ? ? ? ? data_mirror
...
lrw-r--r-- 1 root root 21 2009-01-01 08:00 sdcard -> /storage/self/primary
drwxr-xr-x 2 root root 27 2009-01-01 08:00 second_stage_resources
drwx--x--- 4 shell everybody 80 1972-09-18 07:45 storage
...
pipa:/ $ cd data
pipa:/data $ ls -al
ls: .: Permission denied
1|pipa:/data $ su
/system/bin/sh: su: inaccessible or not found
127|pipa:/data $硬取有点难,头铁去撞系统本身的权限墙有点不必要,App 原生的导出原始 .concepts 文件功能更有可行性一些。试了试 App 原生提供的分享功能,好消息是确实能导出 .concepts 源文件,坏消息是 ctime 丢了,而 ctime 对我来讲是有业务意义的,我还是想能拿到最原始的文件。
但是,最原始文件锁在 data 下拿不到,走其他路子又会丢 ctime,怎么办?这个时候我突然意识到,创建时间这类有明确业务语义的数据,完全不应该用技术性易丢失的 ctime 字段来存哦!假如是我来做这个设计,我一定会在专有文件格式内部留一个字段永久写入进去。
那么:
user@host ~/Downloads> file 1.concepts
1.concepts: Zip archive data, at least v2.0 to extract, compression method=deflate
user@host ~/Downloads> unzip -l 1.concepts
Archive: 1.concepts
Length Date Time Name
--------- ---------- ----- ----
220 09-02-2026 02:17 metadata.json
1315 09-02-2026 02:16 workspace.pack
3 03-26-2024 23:23 resource.pack
217245 09-02-2026 02:16 tree.pack
72006 09-02-2026 02:17 thumb.jpg
--------- -------
290789 5 files
user@host ~/Downloads> unzip -p 1.concepts metadata.json | jq .
{
"backgroundSolidColor": "#F9F9F9",
"creationTime": "2024-03-26T23:23:10.847Z",
"formatVersion": 20250319,
"identifier": "532335e3-45f7-4bd8-8478-da442fa364e2",
"modificationTime": "2026-09-02T02:17:07.174Z"
}同行的默契。
最后,给我自己留一句:考虑问题以终为始,不要被二级节点牵引到一个可能并不存在的新问题上去。