拷贝文件(Object)是指在不改变文件内容的情况下,将同一地域下的源存储空间(Bucket)内的文件复制到目标Bucket,或者将文件复制到相同存储空间(Bucket)的其他目录。您可以通过ossutil的cp命令完成拷贝。
注意事项
-
要拷贝文件,您必须具有
oss:GetObject、oss:ListObjects和oss:PutObject权限。具体操作,请参见为RAM用户授予自定义的权限策略。 -
只支持拷贝对象,不支持拷贝未合并的分片。
-
默认同时复制标签和对象属性。可以使用--copy-props选项设置属性和标签的复制规则。
-
使用
-u, --update选项时,系统会对每个待检查文件(无论目标文件是否存在)至少发起一次 HEAD 请求以进行比对。在数据变更较少的场景下,将产生大量低效请求,可能影响性能并带来额外的请求费用。建议结合实际业务情况评估后再谨慎使用,避免不必要的资源消耗。
命令格式
ossutil cp oss://src_bucket[/src_prefix] oss://dest_bucket[/dest_prefix] [flags]
|
参数 |
类型 |
说明 |
|
src_bucket |
string |
源Bucket名称。 |
|
src_prefix |
string |
源Bucket下的某个文件目录或指定前缀。 |
|
dest_bucket |
string |
目标Bucket名称。 |
|
dest_prefix |
string |
目标Bucket下的某个文件目录或指定前缀。 |
|
--acl |
string |
对象的访问权限。取值:
|
|
--bandwidth-limit |
SizeSuffix |
用于限制网络带宽,控制数据传输的速率。最小值为1024 B/s。单位默认为B/s。 配置此参数时,可以根据需要为带宽值指定单位,可选单位包括B(字节)、K(千字节)、M(兆字节)和G(吉字节)。例如 50 M表示带宽限制为50 MB/s。 |
|
--bigfile-threshold |
SizeSuffix |
开启大文件分片上传、下载或拷贝的阈值(默认值104857600)。 |
|
--cache-control |
string |
指定该对象被下载时网页的缓存行为。 |
|
--checkers |
int |
并行运行的检查器数量(默认值为16)。 |
|
--checkpoint-dir |
string |
断点续传信息的指定目录(默认值 |
|
--checksum |
/ |
仅拷贝文件大小和校验和(如果存在)不一致的源文件,仅当对象间拷贝有效。 |
|
--content-disposition |
string |
指定对象的展示形式。 |
|
--content-encoding |
string |
声明对象的编码方式。 |
|
--content-type |
string |
对象的内容类型。 |
|
--copy-props |
string |
用于设置对象间拷贝时的属性和标签复制规则,支持以下三种设置:
|
|
-d, --dirs |
string |
处理当前目录下的文件和子目录,而非递归处理所有子目录下的所有文件。 |
|
--encoding-type |
string |
输入的对象名或文件名的编码方式。取值:url。 |
|
--end-with |
string |
按字母排序,返回设定值之前的对象,包含设定值。 |
|
--exclude |
stringArray |
路径或文件名的排除规则。 |
|
--exclude-from |
stringArray |
从规则文件里读取排除规则。 |
|
--expires |
string |
指定缓存内容的绝对过期时间。 |
|
--files-from |
stringArray |
从文件中读取源文件名列表,忽略空行或注释行。仅适用于过滤场景。 |
|
--files-from-raw |
stringArray |
从文件中读取源文件名列表。仅适用于过滤场景。 |
|
--filter |
stringArray |
路径或文件名过滤规则。 |
|
--filter-from |
stringArray |
从规则文件读取过滤规则。 |
|
-f, --force |
/ |
强制操作,不进行询问提示。 |
|
--ignore-existing |
/ |
跳过已存在的目标文件。 |
|
--include |
stringArray |
路径或文件名的包含规则。 |
|
--include-from |
stringArray |
从规则文件里读取包含规则。 |
|
-j, --job |
int |
并发任务数,默认值为 3。 说明
仅在同时指定 |
|
--list-objects |
/ |
使用ListObjects接口列举对象。 |
|
--max-size |
SizeSuffix |
限制传输的最大文件大小,默认是字节,或单位后缀形式B|K|M|G|T|P,1K(KiB)=1024B。 |
|
--metadata |
strings |
指定对象的用户元数据,使用key=value格式。 |
|
--metadata-directive |
string |
指定如何设置目标对象的元数据。取值:
|
|
--metadata-exclude |
stringArray |
对象元数据的排除规则。 |
|
--metadata-filter |
stringArray |
对象元数据过滤规则。 |
|
--metadata-filter-from |
stringArray |
从规则文件读取对象元数据过滤规则。 |
|
--metadata-include |
stringArray |
对象元数据的包含规则。 |
|
--min-age |
Duration |
仅拷贝修改时间在指定时间间隔前的文件,默认单位是秒,可以使用单位后缀形式。例如 1h,表示1小时。 说明
|
|
--max-age |
Duration |
仅拷贝修改时间在指定时间间隔内的文件,默认单位是秒,可以使用单位后缀形式。例如 1h,表示1小时。 说明
|
|
--min-mtime |
Time |
仅拷贝修改时间在指定时间之后的文件,时间格式:UTC时间。例如2006-01-02T15:04:05。 说明
|
|
--max-mtime |
Time |
仅拷贝修改时间在指定时间之前的文件,时间格式:UTC时间,例如 2006-01-02T15:04:05。 |
|
--min-size |
SizeSuffix |
限制传输的最小文件大小,默认是字节,或单位后缀形式B|K|M|G|T|P,1K(KiB)=1024B。 |
|
--no-progress |
/ |
不显示进度条。 |
|
--no-error-report |
/ |
批处理时不生成错误报告文件 |
|
--output-dir |
string |
指定批处理过程中生成的错误报告文件所在的目录(默认为 |
|
--page-size |
int |
批量拷贝时分页列举的对象的最大值(默认值1000),取值范围1~1000。 |
|
--parallel |
int |
单文件内部操作的并发任务数。 |
|
--part-size |
SizeSuffix |
分片大小,默认情况下根据文件大小自行计算合适的分片大小值。取值范围100KiB~5GiB。 |
|
-r, --recursive |
/ |
递归进行操作。当指定该选项时,命令会对存储空间下所有符合条件的对象进行操作,否则只对路径指定的对象进行操作。 |
|
--request-payer |
string |
请求的支付方式,如果为请求者付费模式,请设置该值。取值:requester。 |
|
--size-only |
/ |
仅拷贝文件大小不一致的源文件。 |
|
--start-after |
string |
按字母排序,返回设定值之后的对象,不包含设定值。 |
|
--storage-class |
string |
对象的存储类型, 取值:
|
|
--tagging |
string |
指定对象的标签,使用key=value格式。 |
|
--tagging-directive |
string |
指定如何设置目标对象的标签。取值:
|
|
-u, --update |
/ |
跳过目标端已存在且修改时间比源文件更新的文件。 说明
如果目标端已存在的文件的修改时间比源文件的修改时间早,则会更新该文件。 |
|
--version-id |
string |
指定对象的版本 ID(VersionId)。 |
从 ossutil 2.3.0 起,--job、--parallel、--bigfile-threshold、--part-size、--write-buffer-size 选项支持通过配置文件设置。在配置文件对应 profile 段下以 key=value 格式追加(例如 job=10),或通过 ossutil config set 写入。命令行选项的优先级高于配置文件。
关于支持的全局命令行选项,请参见支持的全局命令行选项。
目标文件命名规则如下:
-
单文件复制时,如果dest_prefix为空,则对象的名字为源文件相对路径。
-
单文件复制时,如果dest_prefix以"/"结尾,则对象的名字为dest_prefix + 源文件相对路径。
-
单文件复制时,如果dest_prefix不以"/"结尾, 则与dest_prefix保持一致。
-
批量复制时,如果dest_prefix以"/"结尾,则对象的名字为dest_prefix + 源文件相对路径。
-
批量复制时,如果dest_prefix不以"/"结尾,则对象的名字为dest_prefix + "/" +源文件相对路径。
使用示例
-
拷贝单个文件
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/desfolder/ -
拷贝增量文件
批量拷贝时,如果指定--update选项,跳过目标端已存在且修改时间比源文件更新的文件。命令如下:
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --update -
同区域复制后的 Bucket 间拷贝
-
使用
--checksum参数实现基于校验和的增量拷贝:适用于需要严格比较文件内容一致性的场景(如批量拷贝失败后重传,跳过已成功拷贝的文件)。系统执行逻辑如下:-
优先比较文件大小;
-
若文件大小相同,则进一步计算并比较 CRC64 校验和;
-
仅当校验和不一致时,才执行实际拷贝。
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --checksum -
-
使用
--ignore-existing参数跳过已存在文件:适用于目标端已存在文件时直接跳过、不执行覆盖的场景:ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --ignore-existing
-
-
重命名文件
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/example.txt通过cp命令重命名文件时,原文件仍存在,您可以在重命名后删除原文件。
-
修改文件对象标签
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --tagging "abc=1&bcd=2&……"