rsync与rclone哪个好用
目录
1 rclone 与rsync的区别,适合场景
rclone 和 rsync 都是用来进行文件同步和迁移的工具,但它们的工作原理、功能以及适用场景有所不同:
rclone
- 简介: rclone是一个跨云存储服务的文件管理工具,支持多种云存储提供商,如Google Drive、Dropbox、Amazon S3、Microsoft OneDrive等,同时也支持本地文件系统、网络文件系统(如SFTP、WebDAV)以及其他各种存储后端。
- 特点与优点:
- 多云支持:rclone能够统一管理多个不同云服务商的存储空间,实现跨云同步和迁移。
- 双向同步:rclone不仅可以上传文件,还可以下载和同步云端的最新更改。
- 加密支持:rclone可通过crypt插件对数据进行加密后再上传至云端。
- 增量同步:rclone能检测文件差异,只传输变更部分,节省带宽和时间。
- 配置方便:支持配置文件管理,易于复用和自动化任务调度。
- 缺点:
- 功能集中在云存储服务上,本地文件系统的某些特性支持不如rsync丰富。
- 对于复杂的文件系统元数据(如ACLs、扩展属性)的支持取决于具体的云存储服务提供商是否支持。
- 适用场景:
- 多云存储间的文件同步和迁移。
- 定期备份本地文件到云存储或从云存储恢复文件。
- 自动化的云存储管理和同步任务。
rsync
- 简介: rsync是一个强大的开源文件同步工具,主要设计用于本地或网络上的文件和目录的同步和备份。
- 特点与优点:
- 高效同步:rsync采用了增量传输算法,仅传输文件的不同部分,大大提高了同步效率。
- 灵活:支持多种过滤规则,可以精确控制哪些文件需要同步。
- 丰富的文件属性支持:能够同步文件权限、所有权、时间戳、ACLs、扩展属性等。
- 本地文件系统友好:尤其适用于本地和网络文件系统之间的同步。
- 缺点:
- 不支持直接与云存储服务交互,需要通过挂载或中间层间接使用。
- 对于初次同步大量文件时,rsync需要扫描整个目录结构,初期开销较大。
- 适用场景:
- 本地磁盘之间或局域网内计算机之间的文件和目录同步。
- 定期备份服务器数据到另一台服务器或本地硬盘。
- 系统管理员进行大规模数据迁移或备份任务。
2 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
仅显示简要帮助。
3 rclone 安装 使用
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下可以使用执行脚本命令安装:
|
|
windows下可以下载rclone-v1.49.5-windows-amd64.zip安装包,解压后,将路径添加到Path环境变量中(高级系统设置->环境变量->系统变量)
配置
编辑配置文件linux:~/.config/rclone/rclone.conf,windows:C:\Users\test_user.config\rclone.conf:
|
|
复制
也可以通过执行rclone config,按照提示生成上面的配置文件
4 rclone 命令使用实例
rclone lsd cos:
, 查看广州地域存储桶rclone mkdir cos:rclone-test-1251668577
,创建存储桶rclone-test-1251668577rclone 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显示上次修改时间
5 rclone常用命令
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]
,将标准输出复制到远程文件中