您可以通过cp命令将您OSS内文件拷贝至其他目录或其他Bucket中。目前只支持拷贝文件,不支持拷贝未完成的Multipart,不支持跨region拷贝。
说明 cp命令的格式、支持的参数请参见简介。
示例环境
本文以Linux系统为例,演示如何在不同目录或不同Bucket之间拷贝文件。您在实际使用中,请根据您的系统和使用环境修改对应参数。示例环境如下:
- 操作系统:Linux
- 源Bucket:examplebucket1
- 源Bucket指定目录1:srcfolder1
- 源Bucket指定目录2:srcfolder2
- 源文件:examplefile.txt
- 目标Bucket:examplebucket2
- 目标Bucket指定目录:desfolder
简单拷贝示例
- 拷贝单个文件
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/srcfolder2/
- 拷贝文件夹
拷贝文件时,搭配 -r 选项可以实现批量文件拷贝功能。
./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ -r
- 拷贝增量文件
批量拷贝时,若指定--update选项,只有当目标文件不存在,或源文件的最后修改时间晚于目标文件时,ossutil才会执行拷贝操作。命令如下:
该选项可用于当批量拷贝失败重传时,跳过已经拷贝成功的文件,实现增量拷贝。./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/path2/ -r --update
- 重命名文件
通过cp命令重命名文件时,原文件仍存在,您可以在重命名后删除原文件。./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/example.txt
- 仅拷贝当前目录下的文件,忽略子目录
./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder2/ --only-current-dir -r
- 修改文件meta信息
拷贝文件的同时可以使用--meta选项修改文件的meta信息,其内容格式为
header:value#header:value...
。./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --meta=Cache-Control:no-cache
- 从开通了请求者付费模式的Bucket拷贝文件到普通Bucket
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --payer=requester
修改文件存储类型
您可以在覆写文件时,添加--meta选项来修改文件存储类型。存储类型可选值为:
- Standard:标准存储
- IA:低频访问
- Archive:归档存储
- 将指定文件的存储类型修改归档存储
./ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder1/examplefile.txt --meta X-oss-Storage-Class:Archive
- 将指定文件夹下所有文件的存储类型修改为标准存储
./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder1/ --meta X-oss-Storage-Class:Standard -r
修改文件对象标签
您可以在覆写文件时,添加--tagging选项修改文件对象标签,多个标签以and(&)符号隔开。命令如下:
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --tagging "abc=1&bcd=2&……"
关于对象标签的更多说明请参见object-tagging。
拷贝并加密文件
您可以在拷贝文件时指定文件的服务器端加密方式,将文件加密后保存在Bucket内,关于服务器端加密功能介绍请参见服务器端加密。
- 拷贝文件并指定加密方式为AES256
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/srcfolder2/ --meta=x-oss-server-side-encryption:AES256
- 拷贝文件并指定加密方式为KMS
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --meta=x-oss-server-side-encryption:KMS
注意 使用KMS加密时,OSS会在KMS平台上为这个文件创建一个主密钥,会产生少量KMS密钥API调用费用,详情请参见KMS计费标准。
在已开启版本控制的Bucket内恢复文件
开启Bucket的版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。您可以在cp命令中增加--version-id选项,将历史版本覆写为最新版本。命令如下:
./ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/ --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk
注意
- 使用--version-id选项前,需使用ls --all-versions命令获取文件的versionid。
- --version-id选项仅支持在已开启版本控制的Bucket内使用。开启Bucket版本控制命令请参见bucket-versioning。
批量拷贝符合指定条件的文件
您可以使用--include和--exclude参数,在拷贝时选定符合条件的文件。详情请参见批量上传符合条件的文件。
- 拷贝所有文件格式不为JPG的文件
./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --exclude "*.jpg" -r
- 拷贝所有文件名包含abc且不是JPG和TXT格式的文件
./ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt" -r
在文档使用中是否遇到以下问题
更多建议
匿名提交