当需要将已上传至OSS的文件、图片、视频等资源下载到本地时,可以使用ossutil的cp命令,支持下载多个文件、下载时限速,或者在已开启版本控制的Bucket内下载指定版本文件等。
注意事项
从ossutil 1.6.16版本开始,命令行中Binary名称支持直接使用ossutil,无需根据系统刷新Binary名称。如果ossutil版本低于1.6.16,则需要根据系统刷新Binary名称。更多信息,请参见命令行工具ossutil命令参考。
当在OSS ON云盒中使用该命令时:
将配置文件中的Endpoint替换为云盒Endpoint。更多信息,请参见云盒Endpoint。
在本文已有示例的基础上添加--sign-version、--region以及--cloudbox-id选项。关于这三个选项的具体用法,请参见通用选项。
权限说明
阿里云账号默认拥有全部权限。阿里云账号下的RAM用户或RAM角色默认没有任何权限,需要阿里云账号或账号管理员通过RAM Policy或Bucket Policy授予操作权限。
API | Action | 说明 |
GetObject |
| 下载Object。 |
| 下载Object时,如果通过versionId指定了Object的版本,需要授予此操作的权限。 | |
| 下载Object时,如果Object的元数据包含X-Oss-Server-Side-Encryption: KMS,需要此操作的权限。 | |
ListObjects |
| 批量下载文件(递归操作)时,需要授予此操作的权限。 |
命令格式
ossutil cp cloud_url file_url [options]参数 | 说明 |
cloud_url | OSS文件路径,格式为 |
file_url | 本地文件路径。如果目标是目录,需以路径分隔符(/ 或 \)结尾。如Linux系统文件路径 |
-r, --recursive | 递归操作。当指定该选项时,ossutil会对Bucket下所有符合条件的Object进行操作,否则只对指定的单个Object进行操作。 |
-f --force | 强制操作,不进行询问提示。 |
-u,--update | 只有当目标文件不存在,或源文件的最后修改时间晚于目标文件时,ossutil才会执行下载操作。 |
--maxdownspeed | 最大下载速度,单位为KB/s。默认值为0,表示不限制下载速度。 |
--disable-ignore-error | 批量操作时不忽略错误。 |
--only-current-dir | 仅下载当前目录下的文件,忽略子目录及子目录下的文件。 |
--bigfile-threshold | 设置断点续传文件的大小阈值,单位为字节。 默认值:100 MB 取值范围:0~9223372036854775807 |
--part-size | 设置分片大小,单位为字节。默认情况下ossutil会根据文件大小自行计算合适的分片大小值。 取值范围:1~9223372036854775807 |
--checkpoint-dir | 指定断点续传记录信息所在的目录。断点续传操作失败时,ossutil会自动创建名为 |
--range | 下载目标文件的指定字段,并保存为一个新的文件,字段从0开始编号。
|
--encoding-type | 文件名称的编码方式。取值为url。如果不指定该选项,则表示文件名称未经过编码。 |
--include | 包含符合指定条件的所有文件。 更多信息,请参见include和exclude选项。 |
--exclude | 不包含符合指定条件的文件。 更多信息,请参见include和exclude选项。 |
--meta | 设置文件的元数据,格式为 |
--acl | 文件的读写权限ACL。取值如下:
|
--snapshot-path | 指定保存下载文件时的快照信息所在的目录。在下一次下载文件时,ossutil会读取指定目录下的快照信息进行增量下载。 |
--disable-crc64 | 关闭CRC64数据校验。默认情况下,ossutil进行数据传输时都会打开CRC64校验。 |
--payer | 请求的支付方式。如果希望访问指定路径下的资源产生的流量、请求次数等费用由请求者支付,请将此选项的值设置为requester。 |
--partition-download | 用于分区下载。该选项取值格式为 |
-j,--job | 多文件操作时的并发任务数,默认值为3,取值范围为1~10000。 |
--parallel | 单文件操作时的并发任务数,取值范围为1~10000。 如果不设置此选项,默认由ossutil根据操作类型和文件大小自行决定。 |
--version-id | 下载指定版本的文件,--version-id选项仅支持在已开启版本控制的Bucket内使用。开启Bucket版本控制命令请参见bucket-versioning(版本控制)。 |
--start-time | Unix时间戳。如果输入这个选项,最后更新时间早于该时间的Object会被忽略。 说明 仅1.7.18及以上版本支持设置该参数。关于如何升级版本,请参见update(ossutil版本升级)。 |
--end-time | Unix时间戳。如果使用该选项,则最后更新时间晚于通过此选项指定时间的Object会被忽略。 说明
|
关于此命令的其他通用选项,请参见通用选项。
当ossutil自行设置的默认并发数达不到用户的性能要求时,可以自行调整-j,--jobs和--parallel这两个选项来升降性能。默认情况下,ossutil会根据文件大小来计算parallel个数。当批量下载大文件时,实际的并发数为jobs个数乘以parallel个数。
当ECS虚拟机或者服务器在网络、内存、CPU等资源不是特别大的情况下,建议将并发数调整到100以下。如果网络、内存、CPU等资源没有占满,可以适当增加并发数。
由于线程间资源切换及抢夺等原因,如果并发数过大,ossutil下载性能可能会下降。此外,并发数过大还可能产生EOF错误。所以请根据实际的机器情况调整-j,--jobs和--parallel选项的数值。如果要进行压测,可在一开始时调低这两项数值,然后逐渐调大直至找到最优值。
使用示例
以下示例均以 Linux 系统为例,请根据操作系统和实际环境修改参数。示例环境假定:
Bucket 名称:
examplebucketOSS 目录:
destfolder/本地目录:
localfolder/本地文件:
examplefile.txt
下载单个文件
下载文件到指定目录,并沿用原文件名:
ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/下载文件到指定目录,并重命名为
example.txt:ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/example.txt
批量下载
使用
-r选项下载destfolder目录及其所有子目录和文件。ossutil cp -r oss://examplebucket/destfolder/ localfolder/使用
--only-current-dir选项,仅下载当前目录而忽略子目录下的文件。ossutil cp oss://examplebucket/destfolder/ localfolder/ --only-current-dir -r使用
-u选项,仅下载本地不存在或在 OSS 上已更新的 Object,跳过本地已存在且未改变的文件。ossutil cp -r -u oss://examplebucket/destfolder/ localfolder/
下载符合条件的文件
下载
destfolder目录下所有非JPG格式的文件:ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --exclude "*.jpg"下载
destfolder目录下文件名包含abc,但格式不为JPG和TXT 的文件:ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt"
下载时限速
使用 --maxdownspeed 选项将下载速度限制为 1 MB/s (1024 KB/s)。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --maxdownspeed 1024范围下载
使用 --range 选项将examplefile.txt的第10到第20个字符作为一个文件下载到本地。
ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/ --range 10-20下载指定时间范围文件
使用 --start-time和 --end-time选项仅下载destfolder 目录下修改时间在北京时间2023年10月31日10:09:18至2023年10月31日12:55:58内的文件。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --start-time 1698718158 --end-time 1698728158下载指定版本的文件
首先,使用 ls --all-versions 命令获取 Object 的所有版本 ID。然后,使用 --version-id 选项下载指定版本。
--version-id选项仅支持在已开启版本控制的Bucket内使用。开启Bucket版本控制命令请参见bucket-versioning(版本控制)。
ossutil cp oss://examplebucket/test.jpg localfolder/ --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk下载并生成快照信息
使用 --snapshot-path选项在指定的目录下生成文件下载的快照信息,在下一次指定该选项下载时,ossutil会读取指定路径下的快照信息进行增量下载,详情参见上传并生成快照。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --start-time 1698718158 --end-time 1698728158跨账号或跨地域下载
使用 -e, -i, -k 通用选项,从另一个账号位于“华东2(上海)”地域的 Bucket 下载文件。
需要根据Bucket所在地域填写对应的Endpoint。更多信息,请参见OSS地域和访问域名。
ossutil cp oss://examplebucket/exampleobject.txt localfolder/ -e oss-cn-shanghai.aliyuncs.com -i yourAccessKeyID -k yourAccessKeySecret