在Linux环境下,可以通过tar和Rclone的管道来直接将文件打包上传,以下是一个常见的用法示例
tar -czf - /path/to/files | rclone rcat remote:backup.tar.gz
其中
-czf -
表示用gzip压缩并输出到标准输出(即不创建本地文件,只是将内容传给管道)
|
:管理符,将前一个命令的输出传递给下一个命令rclone rcat:从标准输入接收内容并直接写入到远程存储。
示例:
rclone sync /data/backup alist:/百度云盘/backup -P --log-file="/var/backup.log" --log-level=ERROR --exclude "panel/**" --delete-excluded --modify-window=1s
--exclude "排除的文件夹/**"
:指定要排除的文件夹,其中"排除的文件夹/**"
表示排除文件夹及其所有子文件和子文件夹。替换 "排除的文件夹" 为你实际想排除的目录名称。
--checksum:启用校验和校验,rclone 将基于文件的校验和来判断文件是否发生变化,而不是依赖文件大小或时间戳。
-P:显示进度。
--log-file="/var/backup.log":将日志输出保存到 /var/backup.log 文件中。
--log-level=ERROR:只记录错误信息到日志文件。
这样设置后,rclone 会跳过指定的文件夹并使用校验和来验证文件是否需要同步。
打包分块上传
tar -czf - /path/to/files | split -b 200M - /tmp/backup_$(date +%Y%m%d).tar.gz.part --filter='rclone rcat remote:backup/$(basename "$FILE") --size-only'
$(basename "$FILE")
是一个用于提取文件名的命令,basename会去掉路径中的目录部分,只保留文件名本身。示例:由于我的split不是最新版本,split 不会自动将 "$FILE" 变量传递给 --filter 的命令,改用以下的
生成分块文件,放在 /tmp 目录
cd /data && tar -czf - docker | split -b 200M - /tmp/docker_$(date +%Y%m%d).tar.gz.part
批量上传分块文件到远程目录
for FILE in /tmp/docker_$(date +%Y%m%d).tar.gz.part*; do rclone rcat alist:/百度云盘/docker/$(basename "$FILE") --size-only < "$FILE" done
下载分块文件
rclone copy remote:backup /path/to/local/backup --include "backup_20231030.tar.gz.part*"
示例:rclone copy alist:/百度云盘/docker /data/backup --include "docker_20241030.tar.gz.part*"
合并分块文件
cat /path/to/local/backup/backup_20231030.tar.gz.part* > /path/to/local/backup/backup_20231030.tar.gz
示例:cat /data/backup/docker_20241030.tar.gz.part* > /data/backup/docker_20241030.tar.gz
解压文件
tar -xzf /path/to/local/backup/backup_20231030.tar.gz -C /path/to/extract/directory
示例:tar -xzf /data/backup/docker_20241030.tar.gz -C /data/backup/dockertest