Rclone 数据迁移完全指南 / 第 4 章 - 基本操作
第 4 章 - 基本操作
4.1 命令语法总览
Rclone 的基本命令格式:
rclone <command> <source> <destination> [flags]
<command>:操作类型(copy、move、sync 等)<source>:源路径,格式为remote:path或/local/path<destination>:目标路径,格式同上[flags]:可选参数
常用全局参数:
| 参数 | 说明 | 示例 |
|---|---|---|
--progress / -P | 显示传输进度 | rclone copy src dst -P |
--verbose / -v | 详细输出 | rclone copy src dst -v |
--dry-run / -n | 模拟运行,不实际执行 | rclone sync src dst -n |
--config | 指定配置文件 | rclone --config /etc/rclone.conf ls remote: |
--log-file | 输出日志到文件 | rclone copy src dst --log-file sync.log |
--log-level | 日志级别 | --log-level INFO |
4.2 ls / lsd / lsl — 列出文件
ls — 列出所有文件(递归)
# 列出远程存储中所有文件
rclone ls s3:my-bucket/
# 输出示例:
# 12345 documents/report.pdf
# 678 images/photo.jpg
# 90123 data/backup.tar.gz
lsd — 列出目录
# 只列出目录(不递归)
rclone lsd s3:my-bucket/
# 输出示例:
# -1 2026-01-01 00:00:00 -1 documents
# -1 2026-01-15 12:30:00 -1 images
# -1 2026-02-01 08:00:00 -1 data
lsl — 列出文件(含大小和时间)
# 列出文件,显示大小和修改时间
rclone lsl s3:my-bucket/ --max-depth 1
# 输出示例:
# 12345 2026-01-01 00:00:00.000000000 report.pdf
# 678 2026-01-15 12:30:00.000000000 photo.jpg
lsjson — JSON 格式列出
# 输出 JSON 格式,便于程序处理
rclone lsjson s3:my-bucket/
# 输出示例:
# [{"Path":"documents/report.pdf","Name":"report.pdf","Size":12345,"MimeType":"application/pdf","ModTime":"2026-01-01T00:00:00Z","IsDir":false}]
对比总结
| 命令 | 输出格式 | 递归 | 显示大小 | 显示时间 | 显示哈希 |
|---|---|---|---|---|---|
ls | 文本 | ✅ | ✅(合计) | ❌ | ❌ |
lsd | 文本 | ❌ | ❌ | ✅ | ❌ |
lsl | 文本 | ✅ | ✅ | ✅ | ❌ |
lsjson | JSON | 可选 | ✅ | ✅ | ✅ |
lsf | 自定义 | 可选 | 可选 | 可选 | ❌ |
4.3 copy — 复制文件
rclone copy 将文件从源复制到目标,只复制新文件或修改过的文件(增量复制)。
基本用法
# 本地 → 远程
rclone copy /data/documents/ s3:my-bucket/documents/ --progress
# 远程 → 远程(跨云复制)
rclone copy gdrive:Photos/ onedrive:Photos/ --progress
# 远程 → 本地
rclone copy s3:my-bucket/backups/ /local/backup/ --progress
重要特性
# copy 不会删除目标端的文件
# 只传输源端有而目标端没有的文件,或源端更新的文件
# 示例:
# 源端: a.txt, b.txt, c.txt
# 目标端: a.txt, d.txt
# copy 后目标端: a.txt(被覆盖), b.txt(新增), c.txt(新增), d.txt(保留)
常用参数
# 多线程传输
rclone copy src dst --transfers 16
# 显示进度
rclone copy src dst --progress
# 限制传输大小(只传输 1MB 以上的文件)
rclone copy src dst --min-size 1M
# 跳过已有文件(基于大小和修改时间)
rclone copy src dst --ignore-existing
# 使用检查级别
rclone copy src dst --checksum # 基于校验和比较
rclone copy src dst --size-only # 仅基于大小比较
rclone copy src dst --update # 仅复制更新的文件
4.4 move — 移动文件
rclone move 将文件从源移动到目标,传输完成后删除源端文件。
基本用法
# 移动文件到另一个位置
rclone move s3:my-bucket/incoming/ s3:my-bucket/processed/ --progress
# 移动到另一个 Remote
rclone move gdrive:Temp/ s3:archive/temp/ --progress
# 本地移动
rclone move /data/incoming/ s3:my-bucket/data/ --progress
注意事项
# move 会在成功传输后删除源文件
# ⚠️ 如果源端有大量文件,删除过程可能较慢
# 建议先用 --dry-run 预览
rclone move src dst --dry-run --progress
# 注意:源端空目录默认不会被删除
# 使用 --delete-empty-src-dirs 删除空目录
rclone move src dst --delete-empty-src-dirs --progress
4.5 sync — 同步文件
rclone sync 使目标端与源端完全一致,会删除目标端多余的文件。
基本用法
# 同步本地目录到云端
rclone sync /data/important/ s3:my-bucket/backup/ --progress
# 同步两个远程存储
rclone sync gdrive:Documents/ onedrive:Documents/ --progress
⚠️ sync 的危险性
# sync 会删除目标端不在源端的文件!
# 示例:
# 源端: a.txt, b.txt
# 目标端: a.txt, c.txt
# sync 后目标端: a.txt, b.txt(c.txt 被删除!)
# 🔴 务必先用 --dry-run 预览
rclone sync /data/ s3:my-bucket/ --dry-run --progress
# 🔴 确认方向正确后再执行
rclone sync /data/ s3:my-bucket/ --progress
sync vs copy 对比
| 特性 | copy | sync |
|---|---|---|
| 复制新文件 | ✅ | ✅ |
| 更新已修改文件 | ✅ | ✅ |
| 删除目标端多余文件 | ❌ | ✅ |
| 删除源端文件 | ❌ | ❌ |
| 安全性 | 高 | 中(需确认方向) |
| 适用场景 | 增量备份 | 镜像同步 |
4.6 delete / purge — 删除文件
delete — 删除文件
# 删除远程存储中的所有文件
rclone delete s3:my-bucket/temp/
# 只删除特定扩展名的文件
rclone delete s3:my-bucket/logs/ --include "*.log"
# 删除超过 30 天的文件
rclone delete s3:my-bucket/logs/ --min-age 30d
# ⚠️ 先用 --dry-run 预览
rclone delete s3:my-bucket/temp/ --dry-run
purge — 删除目录及所有内容
# 删除整个目录树
rclone purge s3:my-bucket/temp/
# ⚠️ 操作不可逆,务必先预览
rclone purge s3:my-bucket/temp/ --dry-run
rmdirs — 删除空目录
# 递归删除空目录
rclone rmdirs s3:my-bucket/
4.7 mkdir — 创建目录
# 创建目录
rclone mkdir s3:my-bucket/new-folder/
# 创建嵌套目录
rclone mkdir sftp-server:/data/2026/05/
💡 提示:S3 等对象存储没有真正的目录概念,
mkdir只是创建一个零字节的占位对象。
4.8 check — 校验文件
rclone check 比较源端和目标端的文件是否一致。
基本用法
# 比较本地和远程
rclone check /data/ s3:my-bucket/data/
# 输出示例:
# 2026/01/01 00:00:00 NOTICE: S3 bucket data: 0 differences found
# 2026/01/01 00:00:00 NOTICE: S3 bucket data: 100 matching files
# 如果有差异,会列出不匹配的文件:
# ERROR : file1.txt: md5 differ
# ERROR : file2.txt: file not found in source
校验模式
# 基于哈希值校验(默认)
rclone check src dst
# 基于大小校验(哈希不可用时的备选)
rclone check src dst --size-only
# 只检查目标端是否有源端的文件(单向检查)
rclone check src dst --one-way
# 同时下载文件内容进行逐字节比较(最严格但最慢)
rclone check src dst --download
4.9 hashsum / sha1sum / md5sum — 计算哈希
# 计算 SHA1
rclone sha1sum s3:my-bucket/
# 计算 MD5
rclone md5sum s3:my-bucket/
# 计算指定算法的哈希
rclone hashsum SHA256 s3:my-bucket/
# 输出到文件(可用于后续校验)
rclone md5sum s3:my-bucket/ > checksums.md5
# 使用已有的哈希文件校验
md5sum -c checksums.md5
支持的哈希算法
| 算法 | 说明 | 支持的 Backend |
|---|---|---|
| MD5 | 128 位 | 大多数 backend |
| SHA1 | 160 位 | 大多数 backend |
| SHA256 | 256 位 | 部分 backend |
| Dropbox Hash | 块级哈希 | Dropbox |
| Whirlpool | 512 位 | 部分 backend |
# 查看某个 remote 支持的哈希算法
rclone backend features s3:my-bucket/ | grep Hashes
4.10 cat — 输出文件内容
# 将远程文件输出到 stdout
rclone cat s3:my-bucket/config.json
# 输出部分内容
rclone cat s3:my-bucket/large-file.bin --offset 0 --count 1024
# 通过管道处理
rclone cat s3:my-bucket/data.csv | head -n 10
4.11 size — 查看目录大小
# 查看远程目录大小
rclone size s3:my-bucket/
# 输出示例:
# Total objects: 1,234
# Total size: 5.000 GiB (5368709120 Byte)
# JSON 格式输出
rclone size s3:my-bucket/ --json
# {"count":1234,"bytes":5368709120}
4.12 about — 查看存储配额
# 查看 Google Drive 配额
rclone about gdrive:
# 输出示例:
# Total: 15.000 GiB
# Used: 10.500 GiB
# Free: 4.500 GiB
# Trashed: 0.000 GiB
# JSON 格式
rclone about gdrive: --json
4.13 copyto / moveto — 精确复制/移动单个文件
# 复制单个文件(保留文件名)
rclone copyto /data/report.pdf s3:my-bucket/reports/report.pdf
# 复制并重命名
rclone copyto /data/report.pdf s3:my-bucket/reports/report-2026.pdf
# 移动单个文件
rclone moveto /data/temp.txt s3:my-bucket/archive/temp.txt
4.14 genautocomplete — 生成补全脚本
# 生成 Bash 补全脚本
rclone genautocomplete bash
# 生成 Zsh 补全脚本
rclone genautocomplete zsh
# 生成 Fish 补全脚本
rclone genautocomplete fish
4.15 常用参数速查表
传输控制
| 参数 | 说明 | 默认值 |
|---|---|---|
--transfers / -t | 并行传输文件数 | 4 |
--checkers | 并行校验文件数 | 8 |
--multi-thread-streams | 单文件多线程流数 | 4 |
--buffer-size | 内存缓冲区大小 | 16Mi |
--bwlimit | 带宽限制 | 无限制 |
--max-transfer | 最大传输量 | 无限制 |
--min-size | 最小文件大小 | 无限制 |
--max-size | 最大文件大小 | 无限制 |
比较策略
| 参数 | 说明 |
|---|---|
--checksum / -c | 基于校验和比较 |
--size-only | 仅基于大小比较 |
--update / -u | 仅复制更新的文件(基于修改时间) |
--ignore-existing | 跳过已有文件 |
--ignore-size | 忽略大小差异 |
--ignore-checksum | 忽略校验和差异 |
输出控制
| 参数 | 说明 |
|---|---|
--progress / -P | 显示进度 |
--verbose / -v | 详细输出 |
--quiet / -q | 安静模式 |
--stats | 统计间隔 |
--log-file | 日志文件路径 |
--log-level | 日志级别(DEBUG/INFO/NOTICE/ERROR) |
--dry-run / -n | 模拟运行 |
--json | JSON 格式输出 |
过滤参数
| 参数 | 说明 |
|---|---|
--include | 包含匹配的文件 |
--exclude | 排除匹配的文件 |
--include-from | 从文件读取包含规则 |
--exclude-from | 从文件读取排除规则 |
--filter | 过滤规则 |
--filter-from | 从文件读取过滤规则 |
--min-age | 最小文件年龄 |
--max-age | 最大文件年龄 |
4.16 实战场景
场景 1:将本地项目备份到 S3
rclone sync /home/user/projects/ s3:my-backup/projects/ \
--progress \
--transfers 8 \
--log-file /var/log/rclone-backup.log \
--log-level INFO \
--exclude ".git/**" \
--exclude "node_modules/**" \
--exclude "*.pyc"
场景 2:迁移数据并在完成后清理
# 第一步:预览
rclone move gdrive:OldAccount/ s3:archive/old-account/ \
--dry-run --progress
# 第二步:确认后执行
rclone move gdrive:OldAccount/ s3:archive/old-account/ \
--progress \
--transfers 16 \
--delete-empty-src-dirs \
--log-file migration.log
场景 3:定期校验备份完整性
#!/bin/bash
# verify-backup.sh
rclone check /data/important/ s3:my-backup/important/ \
--one-way \
--log-file /var/log/rclone-check.log \
--log-level INFO
if [ $? -ne 0 ]; then
echo "Backup verification failed!" | mail -s "Rclone Check Alert" admin@example.com
fi
注意事项
⚠️ sync 是单向的:
rclone sync A B让 B 与 A 一致,会删除 B 中不在 A 的文件。方向搞反会造成数据丢失!
⚠️ –dry-run 是你的好朋友:任何不确定的操作,都先加
--dry-run预览。
💡 增量传输:
copy和sync都是增量的,只会传输变化的文件。重复运行不会浪费带宽。
💡 断点续传:如果传输中断,重新运行相同命令即可从中断处继续。
扩展阅读
上一章:← 第 3 章 - 远程存储配置 下一章:第 5 章 - 文件过滤 →