一、问题描述
本人使用Linux操作系统,用的浏览器是Google Chrome。发现Chrome自带的书签同步功能同步书签会出现书签文件夹产生重复的情况,Xmarks插件也不是很合用。
另外还尝试了Delicious,UC云同步,印象笔记,有道笔记,百度云收藏等产品,发现都不是很合用。
二、分析
Google Chrome的所有书签数据以单一文件形式存放,如果可以使用云盘来同步该文件,就可以达到同步书签的目的。可选用的云盘有百度云盘,360云盘,金山快盘等,而在Linux上,金山快盘有官方客户端,因而选用金山快盘。
三、解决方案
假定有两台Linux机子(OS1和OS2),其上都安装有金山快盘和Google Chrome。在OS1上,金山快盘的工作目录是pandir1,Google Chrome的书签数据文件所在目录是bookmarkdir1;在OS2上,金山快盘的工作目录是pandir2,Google Chrome的书签数据文件所在目录是bookmarkdir2。另外假定书签数据文件的名称为Bookmarks。
接下来根据上述背景进行说明。
3.1、错误的解决方案
1、将初始的书签数据文件Bookmarks上传到金山快盘云服务器上,将其同步到OS1上的金山快盘工作目录pandir1中和同步到OS2上的金山快盘工作目录pandir2中,即现在在pandir1中和pandir2中都存在Bookmarks文件
2、进入OS1的Google Chrome书签数据文件所在目录bookmarkdir1,删除原有的书签数据文件,执行ln pandir1/Bookmarks Bookmarks
命令,建立一个硬链接文件;在OS2上,也做类似操作,在bookmarkdir2中建立一个硬链接文件
3、原以为经过1和2步骤,OS1上的Google Chrome对书签的操作会保存到bookmarkdir1下的Bookmarks硬链接文件,也即保存到pandir1下的Bookmarks文件,这也就是金山快盘云服务器上的Bookmarks文件。对于OS2上的Google Chrome来说也是类似的。此时,OS1和OS2上的Google Chrome等价于操作同一个书签数据文件
4、其实,Google Chrome保存书签操作数据的具体步骤如下:[1]
- 创建一个临时文件,将原有的书签数据和书签操作数据存入该临时文件
- 将原有的书签数据文件重命名为其他名称(本来的名称是Bookmarks)
- 将临时文件重命名为Bookmarks
- 删除原有的书签数据文件
根据以上过程,可以发现Google Chrome在保存书签操作数据的时候,会删除在bookmarkdir1或者bookmarkdir2下的Bookmarks硬链接文件,而创建一个新的文件,这个新的文件跟pandir1或者pandir2下的Bookmarks文件没有任何关系,这就导致了“OS1和OS2上的Google Chrome等价于操作同一个书签数据文件”的说法是不成立的,也就说明了以上这种解决方案是错误的。
3.2、正确的解决方案
在讲述正确的解决方案之前,先介绍金山快盘如何判断云服务器端的文件和本地端的文件是否是同一个文件。经过实验发现,关于这个问题,判断标准是“名称是否一致,文件类型等因素不在考虑范围之内”。
在这种情况下,假如在云服务器端有个A文件,本地端有个A文件,A文件是个硬连接文件(或者软符号链接文件),它具体指向本地端的另外一个地方的某个文件AA,此时云服务器端的A文件和本地端的AA文件保持同步,关于本地端的A文件和本地端的AA文件之间的链接关系无需金山快盘程序关心,而由本地文件系统处理。
1、将初始的书签数据文件Bookmarks上传到金山快盘云服务器上,将其同步到OS1上的金山快盘工作目录pandir1中和同步到OS2上的金山快盘工作目录pandir2中,即现在在pandir1中和pandir2中都存在Bookmarks文件
2、进入OS1的金山快盘工作目录pandir1,删除1步骤中得到的Bookmarks文件,执行ln -s bookmarkdir1/Bookmarks Bookmarks
命令,建立一个软符号链接文件,该软符号链接文件指向的是OS1上Google Chrome的书签数据文件;在OS2上,也做类似操作,在pandir2中建立一个软符号链接文件
3、经过1和2,此时,OS1和OS2上的Google Chrome等价于操作同一个书签数据文件,即达到了我们的目标
备注:
1、默认情况下,在Linux上,Google Chrome的书签数据文件路径是~/.config/google-chrome/Default/Bookmarks
2、使用以上解决方案需要遵循一个操作规范:在本地,每次操作书签数据文件之前,都要使用金山快盘进行更新得到最新的书签数据文件,在此基础上操作书签,在操作完成之后,需要使用金山快盘将最新的书签数据文件更新到云服务器端。只有这样子,书签数据文件的同步工作才能正常进行,而不会出现覆盖等现象
3、另外最重要的一点是要关闭Google Chrome自带的书签同步功能:打开chrome浏览器的设置选项,进入高级同步设置选项,勾选掉“书签”选项,点击确定,使得chrome浏览器自带的书签同步功能失效
参考文献: [1]http://superuser.com/questions/993833/why-is-a-created-own-bookmarks-file-deleted-by-chrome/993845?noredirect=1#comment1372457_993845