前面写过一篇 《Obsidian通过Dropbox同步实现文章自动发布》 但是没有具体写Linux下怎么使用maestral的介绍。之前在使用的时候,为了实现只同步制定目录下的文件,经历过惨痛的教训,把dropbox里上传的内容整个删除了好几次,好在有备份重新上传,这里记录下来,希望大家能避坑。

maestral的GitHub地址:https://github.com/samschott/maestral
Maestral: https://maestral.app/

安装maestral

mkdir maestral
cd maestral/
python3 -m venv venv
source venv/bin/activate
python3 -m pip install --upgrade maestral

授权maestral访问dropbox

maestral auth link
# 多账号可以加 -c 选项
# maestral auth link -c home
# 如果没有多账号的情况,最好是不加-c选项,要不然后面所有的命令都需要这个参数,太麻烦了

出现提示后,选择第二项,在控制台打印授权URL

- Linking new account for 'test' config
- Retrieving auth code from Dropbox
? How would you like to you link your account?  
> Open Dropbox website     
  Print auth URL to console

将URL复制到浏览器,登录dropbox账号之后,将页面上生成的访问码粘贴到命令行,粘贴过程中出现打字效果,耐心等待即可
回车之后,提示如下信息表示授权成功了!

! No keyring found, credentials stored in plain text
✓ Credentials written
✓ Linked to xxx

maestral的默认配置文件在~/.config/maestral/maestral.ini , 如果加了 -c 选项之后,配置文件的名称是选项的内容,如home.ini

设置本地同步目录

# /xxx修改为你的目录,需要自己创建
maestral config set path /xxx

如果需要将dropbox的某些目录排除不同步,可执行下面的命令。 记住不要尝试自己去手动修改配置文件,上面提到的坑,就是在这个地方,我尝试将排除的目录直接编辑到配置文件,然后停掉maestral服务,之后手动删掉那些同步过来的目录,然后在启动maestral服务,发现也将我dropbox的远程目录也删除了。

# 查看dropbox远程内容
maestral ls -l

# Photos是你排除的目录,不要带/,之前看配置文件有带/,设置参数也带/
# 所以没有配置就尝试手动修改配置,结果悲剧了
maestral excluded add Photos
maestral excluded add xxx

# 如果发现添加错误了,可以用以下命令删除
maestral excluded remove xxx

# 最后查看添加好的目录
maestral excluded list

如果确实发现内容已经同步下来,可以停止服务,然后将本地同步目录设置到新目录,再修改排除目录,再启动服务进行同步测试。千万别删内容!!!

设置好的配置文件是这样的:

[auth]
account_id = 
keyring = 
token_access_type = offline

[app]
notification_level = 15
log_level = 20
update_notification_interval = 604800
bandwidth_limit_up = 0.0
bandwidth_limit_down = 0.0
max_parallel_uploads = 6
max_parallel_downloads = 6

[sync]
path = /xxx
excluded_items = ['/public', '/photos', '/share', '/xxx']
max_cpu_percent = 20.0
keep_history = 604800
upload = True
download = True

[main]
version = 20.0

maestral服务管理

# 启动服务
maestral start

# 停止服务
maestral stop

# 查看当前正在同步的活动
maestral activity

# 查看历史同步记录
maestral history

可以创建系统服务

maestral autostart -Y

之后会在用户目录下生成两个文件,这个是用户级别的服务,只在用户登录时启动

Created symlink ~/.config/systemd/user/default.target.wants/[email protected] → ~/.local/share/systemd/user/[email protected]

所以可以将[email protected] 拷贝到系统服务目录

cp ~/.config/systemd/user/default.target.wants/[email protected] /lib/systemd/system/

systemctl enable maestral-daemon\@maestral.service 

# 先停掉之前手动启动的服务
maestral stop

systemctl start maestral-daemon\@maestral.service 

# 取消用户登录启动服务
maestral autostart -N

以服务形式启动maestral,仍然可以用activityhistory信息,后续愉快的使用吧。