经常碰到内部同学或者外部客户问ossutil关于增量上传的问题。本文简单描述下原理并举例说明。
用户可从这里获取ossutil。
官网:https://help.aliyun.com/document_detail/50452.html
代码:https://github.com/aliyun/ossutil
应用场景
场景一
某用户有一批文件(比如1000个)要上传到OSS(或从OSS下载,或从OSS拷贝到OSS,下同),当执行批量上传的过程中出现失败(比如在上传第601个文件时失败)。用户立即使用相同命令重新上传,并希望能跳过已经成功上传的文件,实现增量上传。
场景二
考虑这样一个场景,某用户有个目录dir1,连续一周每天往里面写10000个文件(比如监控场景等),每天晚上12:00将当天写入的文件上传至OSS。用户希望后续每天上传当天写入的新文件时能快速跳过前一天已经上传的文件,从而实现加速增量上传。
ossutil相关选项
--update/-u
选项说明
如果指定了该选项,只有以下情况,ossuti才执行上传、下载、拷贝
- 目标文件(或object)不存在
- 源文件(或object)新于目标文件(或object)
当指定了该选项时,无论是否指定了--force选项,当目标文件存在时,ossutil都不会提示,直接采取上述策略。
该选项可用于场景一。
例子
单个上传
$ cat a
########################
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
# 正常上传
$ ossutil cp a oss://tempb3
Succeed: Total num: 1, size: 125. OK num: 1(upload 1 files).
0.176370(s) elapsed
$ ossutil ls oss://tempb3/a
LastModifiedTime Size(B) StorageClass ETAG ObjectName
2018-06-08 10:45:58 +0800 CST 75 Standard 0CA6EECDD13AE2CD9B5246B071288EAB oss://tempb3/a
-
修改内容再加-u上传
- 可以看到该文件被上传,上传后是新的内容,因为last modify不同
$ cat a
##########