使用管道(pipe)将 tar 和 rclone 结合起来,整个过程是流式传输的。简而言之,tar 命令压缩数据并直接通过管道传递给 rclone,而不是将文件先写入磁盘再上传,这样可以节省磁盘空间并且减少IO操作。
示例:Rclone备份同时上传alist挂载天翼、百度、移动云盘
tar --zstd -cf - -C /root/docker . | tee >(rclone rcat --progress alist:/天翼/docker/docker_$(date +%Y%m%d).tar.zst) >(rclone rcat --progress alist:/移动/Rclone/docker/docker_$(date +%Y%m%d).tar.zst) | rclone rcat --progress alist:/百度/docker/docker_$(date +%Y%m%d).tar.zst
tar --zstd -cf - -C /data/docker .
使用zstd
压缩。-cf -
表示将压缩内容输出到标准输出(而不是写入磁盘文件)。rclone rcat
用于接收标准输入并将其上传到指定云盘。- 压缩速度:zstd 通常比 gzip 更快,尤其是在较高的压缩率下。因此,使用 zstd 可能会使得压缩过程比 gzip 更高效,特别是在处理大量数据时
tee
将标准输入的数据同时传递到多个管道。使用了进程替换>(rclone rcat ...)
,这样压缩后的数据就会被同时上传到多个目标。>(rclone rcat --progress alist:/天翼/docker/docker_$(date +%Y%m%d).tar.zst)
:这个命令会将压缩数据上传到天翼目录。>(rclone rcat --progress alist:/移动/Rclone/docker/docker_$(date +%Y%m%d).tar.zst)
:这个命令会将压缩数据上传到 Alist 移动的指定路径。rclone rcat --progress alist:/百度备份/docker/docker_$(date +%Y%m%d).tar.zst
:最后,压缩数据会上传到百度的指定目录。