rclone 是一个命令行的文件同步和管理工具。你可以把它想象成 rsync,但它的目标不是另一台服务器,而是各种云存储服务。
主要特性:
sync, copy, ls)管理所有云存储。
rclone 官方推荐使用一键安装脚本,这是最简单、最可靠的方式。
Bash
x
1# 运行此命令将自动下载并安装 rclone2curl https://rclone.org/install.sh | sudo bash这个脚本会自动识别你的操作系统和架构,并安装最新稳定版。
验证安装:
Bash
21rclone --version2# 输出类似: rclone v1.6x.x
rclone 的一切操作都始于配置。你需要告诉 rclone 如何连接到你的云服务。每一个配置好的云服务(例如你的一个Google Drive账号)在 rclone 中被称为一个 "Remote" (远程存储)。
rclone config)
这是配置 rclone 的主要方式。这个过程是交互式的,会一步步引导你。
Bash
xxxxxxxxxx11rclone config
你会看到一个菜单。我们以配置一个 Google Drive 账号为例:
n (New remote)。name>:给这个 Remote 起一个名字(例如 gdrive)。这个名字在后续命令中会用到。Storage>:你会看到一个长长的列表,显示所有支持的存储。找到 "Google Drive" (例如编号 18),输入编号后回车。client_id> / client_secret>:直接按回车跳过(使用 rclone 默认的 API 密钥)。scope>:选择访问权限。通常选 1 (Full access)。root_folder_id> / service_account_file>:直接回车跳过。Edit advanced config?:输入 n (No)。
如果你在没有图形界面的 Linux 服务器上配置(例如 SSH 连接),会遇到一个关键步骤:
Use auto config?:输入 n (No)。rclone 会在终端里生成一个 URL 链接。rclone 访问。rclone 的提示符(Enter verification code>)后面,回车。Configure this as a team drive?:根据你的需求选 y / n。y ),然后 q (Quit) 退出配置菜单。配置完成后,所有的 "Remotes" 信息都保存在 ~/.config/rclone/rclone.conf 文件中。你可以备份这个文件,或者把它复制到其他机器上,实现 rclone 配置的迁移。
rclone 的命令结构非常清晰:
rclone [命令] [源路径] [目标路径] [标志]
/var/log/Remote名:路径,如 gdrive:MyBackups/logs/
lsd (列出目录)
只列出目录(不递归)。
51# 列出 gdrive 这个 Remote 的根目录下所有文件夹2rclone lsd gdrive:34# 列出 gdrive 下 MyBackups 文件夹中的所有文件夹5rclone lsd gdrive:MyBackups
ls / lsl (列出文件和目录)
ls 递归列出所有文件。lsl 提供更详细的信息(大小、时间)。
51# 列出 gdrive:MyBackups 里的所有文件(包括子目录)2rclone ls gdrive:MyBackups34# 详细列出本地 /var/www 目录的内容5rclone lsl /var/www
copy (复制)
将文件从源复制到目标,跳过已存在且未变化的文件。
21# 把本地 /var/www 目录复制到 gdrive 的 www_backup 文件夹2rclone copy /var/www gdrive:www_backup
sync (同步) ⭐⭐⭐
这是最强大但也最危险的命令。
sync 会让目标目录变得和源目录完全一样。
⚠️ 警告:
sync是单向的。如果你把命令写反了(例如rclone sync gdrive:www_backup /var/www),并且gdrive:www_backup是空的,它会清空你的/var/www目录!
31# 正确示例:将本地 /var/www 同步到 gdrive:www_backup2# (gdrive:www_backup 中多余的文件将被删除)3rclone sync /var/www gdrive:www_backup
move (移动)
将文件从源移动到目标。rclone 会在复制成功后删除源文件。
21# 把本地日志移动到云端,并删除本地文件2rclone move /var/log/old_logs gdrive:ArchivedLogs
delete / purge
delete 删除指定路径下的文件。purge 清空指定路径(删除目录及其中所有内容)。
51# 删除云端的这个特定文件2rclone delete gdrive:www_backup/config.bak34# !!!危险!!!清空云端的 www_backup 文件夹5rclone purge gdrive:www_backup
check (检查)
检查源和目标的文件是否一致,但不执行任何操作。非常适合在 sync 之前使用。
21# 检查本地和云端有多少文件不同2rclone check /var/www gdrive:www_backup
标志 (Flags) 是 rclone 的精髓,它们可以精细控制命令的行为。
--dry-run (演习)
在执行任何 copy, sync, move, delete 命令前,强烈建议先加上 --dry-run (或 -n) 标志。
它会模拟整个过程,告诉你它 打算 做什么(哪些文件会被复制/删除),但不会真的执行。
21# 演习一次同步,看看哪些文件会被删除2rclone sync /var/www gdrive:www_backup --dry-run
--transfers=N:设置并行传输的文件数量(默认为 4)。如果你在小文件很多的情况下同步,可以调高它(如 16)来提速。
--checkers=N:设置并行检查文件状态的数量(默认为 8)。
--bwlimit=SIZE:限制带宽。非常有用,可以防止 rclone 占满你的服务器带宽。
--bwlimit=10M (限制为 10 MByte/s)--bwlimit=8.5M (这是典型的 100Mbps 住宅带宽的上传限制)21# 在后台同步,设置16个并发,并限制带宽为 50M/s2rclone sync /data gdrive:data --transfers=16 --bwlimit=50M
这是 rclone 另一个极其强大的功能,允许你精确控制哪些文件被传输。
--exclude <pattern>:排除匹配模式的文件。--include <pattern>:包含匹配模式的文件。--filter-from <file>:从一个规则文件中读取过滤规则。规则语法:
*.log 匹配所有 log 文件config.ini 匹配特定文件/logs/** 匹配 logs 目录下的所有内容(** 表示递归)示例:
141# 同步时,排除所有的 .log 文件和 .git 目录2rclone sync /var/www gdrive:www_backup \3 --exclude "*.log" \4 --exclude ".git/**"56# 最佳实践:使用 filter-rules.txt 文件7# (filter-rules.txt 内容如下)8# - *.log9# - .git/**10# - cache/11# + *.jpg12# - *13# (上面的规则意思是:排除log和.git,只包含jpg,其他都排除)14rclone sync /var/www gdrive:www_backup --filter-from /root/filter-rules.txt
mount (挂载)
rclone mount 可以将云存储挂载到本地文件系统,使其看起来像一个本地硬盘。这需要 FUSE 支持。
1. 安装 FUSE:
41# Debian / Ubuntu2sudo apt-get install fuse3# CentOS / RHEL4sudo yum install fuse2. 创建挂载点并挂载:
101# 1. 创建一个空目录作为挂载点2mkdir ~/gdrive_mount34# 2. 挂载5# --daemon 会让 rclone 在后台运行6rclone mount gdrive: ~/gdrive_mount --daemon78# 3. 现在你可以像操作本地文件夹一样操作 ~/gdrive_mount9ls ~/gdrive_mount10cp my_file.txt ~/gdrive_mount/3. 卸载:
11fusermount -u ~/gdrive_mount注意: 挂载的性能和稳定性取决于网络和云服务商的 API。它适合用于读取、浏览和流式传输(如 Plex),但不太适合高 I/O 的数据库或编译操作。
crypt (客户端加密)
这是一个“包装器” (Wrapper) Remote。你可以创建一个 crypt 类型的 Remote,它会指向另一个你已经配置好的 Remote(比如 gdrive:)。
crypt Remote (加密) -> gdrive Remote (上传)gdrive Remote (下载) -> crypt Remote (解密) -> 本地读取配置 crypt 时 (rclone config),它会要求你:
gdrive:EncryptedFiles)。配置好后(假设你命名为 gdrive_crypt),你所有传到 gdrive_crypt: 的文件在上传到 Google Drive 之前都会被加密(包括文件名)。这样,云服务商也无法知道你存储了什么。
21# 同步到加密的 Remote2rclone sync /secret/data gdrive_crypt:MySecrets
场景1:每日服务器网站备份 (Cron Job)
目标:每天凌晨 3 点,将 /var/www 和 /etc/nginx 备份到 Google Drive,排除日志和缓存文件,并限制带宽。
2412# /root/backup.sh34LOG_FILE="/var/log/rclone_backup.log"5FILTER_FILE="/root/backup_filters.txt"67# 过滤器内容 (backup_filters.txt)8# - /var/www/cache/**9# - *.log10# - .git/**1112echo "--- Backup started at $(date) ---" >> $LOG_FILE1314rclone sync /var/www gdrive:ServerBackup/www \15 --filter-from $FILTER_FILE \16 --bwlimit=10M \17 --transfers=8 \18 --log-file=$LOG_FILE -v1920rclone sync /etc/nginx gdrive:ServerBackup/nginx \21 --bwlimit=10M \22 --log-file=$LOG_FILE -v2324echo "--- Backup finished at $(date) ---" >> $LOG_FILE设置 Cron: crontab -e
0 3 * * * /bin/bash /root/backup.sh
场景2:云到云数据迁移
目标:将 OneDrive 上的所有 Photos 迁移到 S3 存储桶 my-s3-bucket。
41# 假设你已配置好 onedrive: 和 s3:2# 使用高并发传输,因为云端带宽通常很高3rclone copy onedrive:Photos s3:my-s3-bucket/Photos --transfers=32 -P4# -P (或 --progress) 会实时显示进度
| 命令 | 功能 |
|---|---|
rclone config | (核心) 配置新的或已有的 Remotes |
rclone ls [remote:path] | 列出文件 |
rclone lsd [remote:path] | 列出目录 |
rclone copy [src] [dst] | 复制(跳过已有) |
rclone sync [src] [dst] | 同步(注意:会删除目标端多余文件) |
rclone move [src] [dst] | 移动(源端删除) |
rclone delete [remote:path] | 删除文件 |
rclone purge [remote:path] | 清空目录(危险!) |
rclone check [src] [dst] | 检查源和目标是否一致 |
rclone mount [r:p] [local] | 将云存储挂载为本地磁盘 |
| 标志 (Flags) | 功能 |
|---|---|
--dry-run / -n | (必用) 模拟运行,不实际操作 |
--interactive / -i | 交互模式,在删除/覆盖前询问 |
-P / --progress | 显示实时传输进度 |
--transfers=N | 并发传输数 |
--bwlimit=SIZE | 限制带宽 (如 10M) |
--filter-from FILE | 从文件加载过滤规则 |
--exclude PATTERN | 排除模式 |
--include PATTERN | 包含模式 |
--daemon | (仅 mount) 后台运行 |