rsync与rclone哪个好用

rclonersync 都是用来进行文件同步和迁移的工具,但它们的工作原理、功能以及适用场景有所不同:

rclone

  • 简介: rclone是一个跨云存储服务的文件管理工具,支持多种云存储提供商,如Google Drive、Dropbox、Amazon S3、Microsoft OneDrive等,同时也支持本地文件系统、网络文件系统(如SFTP、WebDAV)以及其他各种存储后端。
  • 特点与优点:
    • 多云支持:rclone能够统一管理多个不同云服务商的存储空间,实现跨云同步和迁移。
    • 双向同步:rclone不仅可以上传文件,还可以下载和同步云端的最新更改。
    • 加密支持:rclone可通过crypt插件对数据进行加密后再上传至云端。
    • 增量同步:rclone能检测文件差异,只传输变更部分,节省带宽和时间。
    • 配置方便:支持配置文件管理,易于复用和自动化任务调度。
  • 缺点
    • 功能集中在云存储服务上,本地文件系统的某些特性支持不如rsync丰富。
    • 对于复杂的文件系统元数据(如ACLs、扩展属性)的支持取决于具体的云存储服务提供商是否支持。
  • 适用场景
    • 多云存储间的文件同步和迁移。
    • 定期备份本地文件到云存储或从云存储恢复文件。
    • 自动化的云存储管理和同步任务。

rsync

  • 简介: rsync是一个强大的开源文件同步工具,主要设计用于本地或网络上的文件和目录的同步和备份。
  • 特点与优点:
    • 高效同步:rsync采用了增量传输算法,仅传输文件的不同部分,大大提高了同步效率。
    • 灵活:支持多种过滤规则,可以精确控制哪些文件需要同步。
    • 丰富的文件属性支持:能够同步文件权限、所有权、时间戳、ACLs、扩展属性等。
    • 本地文件系统友好:尤其适用于本地和网络文件系统之间的同步。
  • 缺点
    • 不支持直接与云存储服务交互,需要通过挂载或中间层间接使用。
    • 对于初次同步大量文件时,rsync需要扫描整个目录结构,初期开销较大。
  • 适用场景
    • 本地磁盘之间或局域网内计算机之间的文件和目录同步。
    • 定期备份服务器数据到另一台服务器或本地硬盘。
    • 系统管理员进行大规模数据迁移或备份任务。

  • --verbose, -v:增加输出详细程度,显示更多信息。
  • --info=FLAGS:细粒度的信息详细级别控制。
  • --debug=FLAGS:细粒度的调试详细级别控制。
  • --stderr=e|a|c:改变标准错误输出模式,默认显示错误信息。
  • --quiet, -q:抑制非错误消息,减少输出。
  • --no-motd:在守护进程模式下禁止显示消息。
  • --checksum, -c:基于校验和跳过文件传输,而非依据修改时间和大小。
  • --archive, -a:启用归档模式,等同于 -rlptgoD(不包括 -A, -X, -U, -N, -H)。
  • --no-OPTION:关闭隐含的选项。
  • --recursive, -r:递归处理目录及其子目录。
  • --relative, -R:使用相对路径名。
  • --no-implied-dirs:在使用 --relative 时不发送隐含目录。
  • --backup, -b:创建备份(参见 --suffix--backup-dir)。
  • --backup-dir=DIR:将备份文件保存到基于 DIR 的层级结构中。
  • --suffix=SUFFIX:设置备份文件的后缀(默认为 ~,如果不使用 --backup-dir)。
  • --update, -u:跳过接收端较新的文件。
  • --inplace:在原地更新目标文件。
  • --append:追加数据到较短的文件。
  • --append-verify:追加数据的同时验证旧数据的文件校验和。
  • --dirs, -d:仅传输目录,不递归。
  • --old-dirs, --old-d:在与旧版 rsync 通信时表现得像 --dirs
  • --mkpath:创建目标缺失的路径组成部分。
  • --links, -l:作为符号链接复制符号链接。
  • --copy-links, -L:将符号链接转换为其引用的文件或目录。
  • --copy-unsafe-links:仅“不安全”的符号链接会被转换。
  • --safe-links:忽略指向树外的符号链接。
  • --munge-links:混淆符号链接,使其安全且不可用。
  • --copy-dirlinks, -k:将指向目录的符号链接转换为其指向的目录。
  • --keep-dirlinks, -K:在接收端将符号链接视为目录处理。
  • --hard-links, -H:保留硬链接。
  • --perms, -p:保留权限。
  • --executability, -E:保留可执行属性。
  • --chmod=CHMOD:影响文件和/或目录权限。
  • --acls, -A:保留 ACL(访问控制列表)(暗含 --perms)。
  • --xattrs, -X:保留扩展属性。
  • --owner, -o:保留所有者(仅超级用户可用)。
  • --group, -g:保留组。
  • --devices:保留设备文件(仅超级用户可用)。
  • --copy-devices:作为普通文件复制设备内容。
  • --write-devices:将设备写入文件(暗含 --inplace)。
  • --specials:保留特殊文件。
  • -D:等同于 --devices --specials
  • --times, -t:保留修改时间。
  • --atimes, -U:保留访问(使用)时间。
  • --open-noatime:打开文件时避免更改访问时间。
  • --crtimes, -N:保留创建时间(新文件标记)。
  • --omit-dir-times, -O:从 --times 中排除目录。
  • --omit-link-times, -J:从 --times 中排除符号链接。
  • --super:接收端尝试超级用户操作。
  • --fake-super:使用扩展属性存储/恢复特权属性。
  • --sparse, -S:将连续的零转化为稀疏块。
  • --preallocate:在写入前分配目标文件的空间。
  • --dry-run, -n:执行模拟运行,不作任何实际更改。
  • --whole-file, -W:以整个文件形式传输,不使用增量算法。
  • --checksum-choice=STR:选择校验和算法(也称为 --cc)。
  • --one-file-system, -x:不在文件系统边界间跳跃。
  • --block-size=SIZE, -B:强制固定校验和块大小。
  • --rsh=COMMAND, -e:指定远程使用的shell。
  • --rsync-path=PROGRAM:指定远程机器上运行的rsync程序。
  • --existing:在接收端跳过创建新文件。
  • --ignore-existing:在接收端跳过已存在的文件更新。
  • --remove-source-files:发送端删除同步后的文件(非目录)。
  • --del:别名,等同于 --delete-during
  • --delete:从目标目录中删除额外的文件。
  • --delete-before:接收端在传输前删除文件。
  • --delete-during:接收端在传输过程中删除文件。
  • --delete-delay:在传输期间找出待删除的文件,传输后删除。
  • --delete-after:接收端在传输后删除文件,不在传输过程。
  • --delete-excluded:同时也从目标目录中删除被排除的文件。
  • --ignore-missing-args:忽略丢失源参数而不产生错误。
  • --delete-missing-args:从目标删除丢失的源参数对应的文件。
  • --ignore-errors:即使存在I/O错误也要删除。
  • --force:强制删除非空目录。
  • --max-delete=NUM:限制最多删除文件数量。
  • --max-size=SIZE:不传输大于 SIZE 的文件。
  • --min-size=SIZE:不传输小于 SIZE 的文件。
  • --max-alloc=SIZE:更改与内存分配有关的限制。
  • --partial:保留部分传输的文件。
  • --partial-dir=DIR:将部分传输的文件放入 DIR 目录。
  • --delay-updates:将所有更新的内容推迟到最后时刻放到位。
  • --prune-empty-dirs, -m:从文件列表中修剪空的目录链。
  • --numeric-ids:不通过用户名/组名映射UID/GID。
  • --usermap=STRING:自定义用户名映射。
  • --groupmap=STRING:自定义组名映射。
  • --chown=USER:GROUP:简单的用户名/组名映射。
  • --timeout=SECONDS:设置IO超时秒数。
  • --contimeout=SECONDS:设置与守护进程连接超时秒数。
  • --ignore-times, -I:即使文件大小和时间戳匹配也不跳过文件。
  • --size-only:仅根据大小跳过文件。
  • --modify-window=NUM, -@:设置时间戳比较精度。
  • --temp-dir=DIR, -T:在 DIR 目录中创建临时文件。
  • --fuzzy, -y:在目标没有匹配文件时寻找相似文件。
  • --compare-dest=DIR:在 DIR 目录中比较目标文件。
  • --copy-dest=DIR:包括未改动文件的副本至 DIR。
  • --link-dest=DIR:对未改动文件创建至 DIR 的硬链接。
  • --compress, -z:在传输过程中压缩文件数据。
  • --compress-choice=STR:选择压缩算法(也称为 --zc)。
  • --compress-level=NUM:明确设置压缩级别(也称为 --zl)。
  • --skip-compress=LIST:跳过具有指定后缀的文件压缩。
  • --cvs-exclude, -C:自动忽略CVS风格的文件。
  • --filter=RULE, -f:添加文件过滤规则。
  • -F:等同于 --filter='dir-merge /.rsync-filter' 并重复应用规则。
  • --exclude=PATTERN:排除匹配PATTERN的文件。
  • --exclude-from=FILE:从FILE中读取排除模式。
  • --include=PATTERN:不要排除匹配PATTERN的文件。
  • --include-from=FILE:从FILE中读取包含模式。
  • --files-from=FILE:从FILE中读取源文件名列表。
  • --from0, -0:所有 *-from/filter 文件以 NULL 字符分隔。
  • --old-args:禁用现代参数保护机制。
  • --secluded-args, -s:使用协议安全地发送参数。
  • --trust-sender:信任远程发送方的文件列表。
  • --copy-as=USER[:GROUP]:为复制操作指定用户及可选组。
  • --address=ADDRESS:绑定用于连接守护进程的外出套接字地址。
  • --port=PORT:指定双冒号形式的备用端口号。
  • --sockopts=OPTIONS:指定自定义TCP选项。
  • --blocking-io:对远程shell使用阻塞I/O。
  • --outbuf=N|L|B:设置输出缓冲模式为无缓冲、行缓冲或块缓冲。
  • --stats:显示一些文件传输统计信息。
  • --8-bit-output, -8:在输出中保留高位字符,不转义。
  • --human-readable, -h:以人类可读格式输出数字。
  • --progress:在传输过程中显示进度。
  • -P:等同于 --partial --progress
  • --itemize-changes, -i:列出所有更新项的详细变化摘要。
  • --remote-option=OPT, -M:仅将选项发送至远程端。
  • --out-format=FORMAT:使用指定的FORMAT输出更新信息。
  • --log-file=FILE:记录操作到指定的日志文件。
  • --log-file-format=FMT:使用指定的FMT格式记录更新。
  • --password-file=FILE:从FILE中读取守护进程访问密码。
  • --early-input=FILE:为守护进程的早期执行输入提供FILE。
  • --list-only:仅列出文件而不进行复制操作。
  • --bwlimit=RATE:限制套接字I/O带宽速率。
  • --stop-after=MINS:在经过MINS分钟后停止rsync操作。
  • --stop-at=y-m-dTh:m:在指定时间点停止rsync操作。
  • --fsync:在每次写入文件后调用fsync()。
  • --write-batch=FILE:将批处理更新写入FILE。
  • --only-write-batch=FILE:类似于--write-batch,但不更新目的地。
  • --read-batch=FILE:从FILE中读取批处理更新。
  • --protocol=NUM:强制使用指定版本的较旧协议。
  • --iconv=CONVERT_SPEC:请求文件名的字符集转换。
  • --checksum-seed=NUM:设置块和文件校验和种子(高级选项)。
  • --ipv4, -4:优先使用IPv4。
  • --ipv6, -6:优先使用IPv6。
  • --version, -V:打印版本信息和其他详细信息并退出。
  • --help, -h:显示帮助信息。注意单独使用 -h 仅显示简要帮助。

rclone可以方便的在两个不同存储之间同步文件,源和目的包括本地存储、Amazon S3、Tencentyun COS]、Alibaba OSS、Ceph、Google Drive、Dropbox等。

主要功能

  • MD5/SHA1进行文件的完整性校验(对于S3存储,通过MD5)
  • 保存文件的修改时间(对于S3存储,通过x-amz-meta-mtime元信息)
  • Copy模式只拷贝新增和变化的文件
  • Sync模式使得目的和源文件夹完全一样
  • Check模式通过文件hash校验一致性
  • 可以通过网络,跨越存储和不同账号同步数据
  • fuse挂载
  • 多线程数据下载

安装:

linux下可以使用执行脚本命令安装:

1
curl https://rclone.org/install.sh | sudo bash

windows下可以下载rclone-v1.49.5-windows-amd64.zip安装包,解压后,将路径添加到Path环境变量中(高级系统设置->环境变量->系统变量)

配置

编辑配置文件linux:~/.config/rclone/rclone.conf,windows:C:\Users\test_user.config\rclone.conf:

1
2
3
4
5
6
7
[cos]
type = s3 # s3后端存储类型
provider = Other
env_auth = false # 不从环境变量中获取密钥
access_key_id = AKIDXXXXXXXXXXXXXX # 腾讯云的secretId
secret_access_key = YYYYYYYYYYYYYYYYYYY # 腾讯云的secretKey
endpoint = cos.ap-guangzhou.myqcloud.com # COS的域名

复制

也可以通过执行rclone config,按照提示生成上面的配置文件

  • rclone lsd cos:, 查看广州地域存储桶
  • rclone mkdir cos:rclone-test-1251668577,创建存储桶rclone-test-1251668577
  • rclone sync local-folder/ cos:rclone-test-1251668577/storage,将本地local-folder下的文件同步到存储桶的/storage目录下,该操作会将/storage下的所有其他文件删除掉
  • rclone ls cos:rclone-test-1251668577,列出rclone-test-1251668577根目录下的文件
  • rclone copy local-folder/ cos:rclone-test-1251668577/,拷贝本地文件或目录到COS上,不会删除目的端的其他文件
  • rclone copy cos:rclone-test-1251668577 cos:rclone-test-backup-1251668577,同一个存储,在服务端使用copy操作拷贝文件
  • rclone sync local-folder/ cos:rclone-test-1251668577/ --backup-dir cos:rclone-test-backup-1251668577/20191011,将本地文件同步到cos,并备份被删除或修改的文件到备份存储桶中
  • rclone copy --max-age 24h --progress --no-traverse local-folder/ cos:rclone-test-1251668577/--max-age 24h过滤出来最近24小时变更过的文件,--progress显示拷贝进度,--no-traverse在从源拷贝少量文件到目的中大量目的文件时,速度会更快
  • rclone check local-folder/ cos:rclone-test-1251668577/ --one-way,查看本地文件是否都同步到了目的端,默认校验修改时间和大小
  • rclone --min-size 500B lsl cos:rclone-test-1251668577/,查看存储桶中500B以上的文件列表
  • rclone --dry-run --min-size 300B delete cos:rclone-test-1251668577/,查看存储桶中500B以上的待删除文件列表
  • rclone delete oss:oss-test-bucket-1215715707/ --include=/stl-views.gdb,删除根目录下的stl-views.gdb文件,如果不带/前缀,则会删除所有stl-views.gdb文件
  • rclone size cos:rclone-test-1251668577/,查看存储桶中对象数目和占用的空间大小
  • rclone mount cos:rclone-test-1251668577/ rclone-mnt/,将cos挂载成一个本地文件系统
  • rclone ncdu cos:rclone-test-1251668577/,一个简易文本形式的文件浏览器,用于存储桶中的文件浏览、文件和文件夹删除等操作
  • rclone cat cos:rclone-test-1251668577/test.cpp --head 10,输出test.cpp的前10个字节
  • echo "hello world" |rclone rcat cos:rclone-test-1251668577/rcat.txt将标准输出复制到存储桶的rcat.txt文件中,会覆盖目标文件
  • rclone sync oss:oss-test-bucket-1215715707/ cos:rclone-test-1251668577/ -P,同步oss存储桶中的数据到cos存储桶中,-P选项显示进度
  • rclone check oss:oss-test-bucket-1215715707/ cos:rclone-test-1251668577/ -P,进行数据对比校验
  • rclone md5sum cos:rclone-test-1251668577/,为所有文件生成MD5值
  • rclone tree cos:rclone-test-1251668577/ -C -D,显示文本格式的目录树结构,-C选项带颜色显示,-D显示上次修改时间
  • rclone copy source:path dest:path,从源文件拷贝到目的,不会删除目的的文件,会跳过未变更的文件,基于大小和修改时间或MD5值判断是否变更过。
  • rclone sync source:path dest:path,将目的文件夹同步成和原文件夹完成相同,会删除目的文件夹中的其他文件,可以先用–dry-run参数运行,查看哪些文件会被删除和变更。
  • rclone move source:path dest:path ,移动文件夹,对于少量文件移动到有大量文件的目的,可以使用--no-traverse参数加速。
  • rclone purge remote:path,删除path及其中的所有内容。
  • rclone mkdir remote:path [flags],如果路径不存在,则创建
  • rclone rmdir remote:path [flags] ,删除空的存储桶,如果存储桶非空,可以使用rclone purge
  • rclone check source:path dest:path [flags],根据文件大小以及hash值对源和目的进行校验(md5和sha1),–size-only只对比大小;–download下载下来对比;–one-way,根据源端的数据列表对比; –checksum ,进行size, checksum校验;默认,进行大小和修改时间校验。
  • rclone ls remote:path [flags],查看对象大小和路径;lsl,包括修改时间;lsd,列出目录;lsjson,以json格式输出。
  • rclone lsd remote:path [flags],列出路径下的目录或存储桶
  • rclone delete remote:path [flags],删除path下符合条件的对象
  • rclone size remote:path [flags],查看远端的文件数目和总大小
  • rclone rcat remote:path [flags],将标准输出复制到远程文件中

随机文章