rclone快速上手

rclone快速上手

2023/04/02

doc: https://rclone.org/docs/

# 开启命令行提示, oh-my-zsh 不要 compinit 相关
rclone genautocomplete zsh

# 如果提示 /zsh/vendor-completions 不存在,可以放到家目录下:
acdef_path="${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/rclone"
mkdir -p "$acdef_path"
rclone genautocomplete zsh "$acdef_path/_rclone"
# 然后添加 rclone 到 .zshrc 的 plugins 列表里
plugin=(... rclone)

0. config

rclone config paths
rclone config show

命令行交互式创建配置:

rclone config
# s) Set configuration password 可以为配置设置密码,这样在浏览远程时均需要此密码

也可以在 web ui 里创建,启动命令:

rclone rcd --rc-web-gui

手动配置示例:

[al]
# storage systems, from `rclone help backends`
type = webdav
url = http://code-dav:5244/dav
vendor = other
user = al
pass = Q-001-ada

1. 过滤器

doc:

可供的选项有 include,exclude,filter。

  • 使用范围: sync, move, ls, lsl, md5sum, sha1sum, size, delete, check 等命令;

  • 不要同时使用 include 与 exclude,这种需求应使用 filter;

  • 如果没有 include 相关配置,则默认会添加 --include=** 来选中所有;

  • 这三个命令都支持从文件中读取选择;

  • 默认区分大小写, --ignore-case 可忽略大小写;

  • 默认在同步时不删除已排除的文件,--delete-excluded 将删除;

    • 例如:a.bak 已被 excluded,则 src 同步到 dst 时,不会删除 dst 的 a.bak,如果加了此参数则会删除 dst 的 a.bak。
  • 过滤器设置的路径不管什么操作系统都用 /

  • 三个命令生效顺序依次为: include,exclude,filter;

示例 (下面仅仅是实际不要同时用三个命令中的两种及以上!!!):

# include
rclone copy /tmp/src /tmp/dst --include="*.jpg" --include-from=in_ex-rules.txt

# exclude
rclone copy /tmp/src /tmp/dst --exclude="*.jpg" --exclude-from=in_ex-rules.txt

# filter
rclone copy \
	/tmp/src /tmp/dst \
  --filter-from=/tmp/filter-rules.txt
  --create-empty-src-dirs
  --ignore-case

/tmp/in_ex-rules.txt:

# a sample include/exclude rule file
*.bak
file2.jpg

/tmp/filter-rules.txt:

# filter
- zz-**
- {tmp,temp}.*
- {tmp,temp}/
- vo/

# ignore git ???
- .git/

# IDE
- .idea/
- .vscode/

# py
- __pycache__/
- .ipynb_checkpoints**

+ *.{jpg,png}
+ /mydir/**

其他过滤器

https://rclone.org/filtering/#other-filters

  • --[min|max]-[size|age]: 根据大小,时间过滤
  • --metadata-<same-to-ex/in/filter>: 根据元数据过滤

2. 通用参数

常用参数:

-n, --dry-run # 不真正执行动作
--log-level LEVEL
	DEBUG  # same to -vv
	INFO   # same to -v
	NOTICE # default
	ERROR  # -q

3. 查看

下面说明默认为递归, 通过--max-depth=1 可不递归.

3.1 大小:

  • size: 大小单位已经处理, --json 输出为 json

3.2 列表

  • ls 所有文件及其大小
  • lslls 多一个修改时间
  • lsd 只列文件夹及其时间, 默认不递归, 加 -R 递归
  • lsf 文件[夹]输出结果类似 unix 的 ls(目录后又斜杠), 默认不递归, 加 -R 递归
  • lsjson 文件[夹]输出为 JSON, 默认不递归, 加 -R 递归

示例:

rclone ls al: # list remote root
rclone ls /tmp # list local

3.3 树形

  • tree 类似 unix 的 tree
    • -a 包含隐藏文件
    • -s 大小
  • ncdu 交互式查看, rclone_ncdu, 截取部分快捷键
    • ?: 查看快捷键帮助
    • 上下: move; 左右: 上一级和下一级
    • d: 删除所有; D: 删除选中
    • v: 选中, 选中后会高亮; V: 进入或退出 visual select mode

4. 同步

  • copy: 不会删除目标的任何文件
  • sync: 会删除目标文件, 只会更改目标不会更改源
  • bisync: 双向同步,两侧都会根据修改时间(ModTime)合并删改,优先不删除(一侧修改一侧删除,同步后会保留),官方示例: normal-sync-checks
    • 关于 ModTime: modified-time-and-hashes, 原生 webdav 不支持 ModTime, 但 Fastmail Files/Owncloud/Nextcloud 可通过 header X-OC-Mtime 来传递 ModTime, 对于 alist 可选择 Fastmail Files 后端来配合 rclone

常用参数:

  • -n/--dry-run: 不真正生效
  • --create-empty-src-dirs: 空文件夹也创建
  • --ignore-case: filter 规则匹配时忽略大小写
  • -P/--progress: 显示进度条

简单同步脚本:

# arg1: src, default to script path
# dst: last part of src path
SRC="${1:-$(dirname "$(realpath "$0")")}"
REMOTE="al:/local/${2:-public/}"

DST="$(basename "$SRC")"
FILTER_RULES="/etc/rclone/filter-rules.txt"

echo "sync to remote, src=$SRC, dst=$REMOTE$DST, using filter rules=$FILTER_RULES"

rclone bisync "$SRC" "$REMOTE$DST" \
    --filter-from="$FILTER_RULES" \
    --ignore-case \
    --create-empty-src-dirs \
    -P
Last updated on