文档

mc cp

语法

mc cp 命令用于在 MinIO 部署与本地文件系统之间复制对象, 其中源端可以是 MinIO 本地文件系统。

你也可以将 mc cp 用于本地文件系统,达到与 cp 命令行工具 类似的效果。

Note

mc cp 仅复制对象的最新版本或指定版本,不包含任何版本信息或修改日期。 要复制所有版本、版本信息及相关元数据,请使用 mc replicate addmc admin replicate

以下命令将文件从本地文件系统目录复制到 myminio MinIO 部署中的 mydata 存储桶:

mc cp --recursive ~/mydata/ myminio/mydata/

mc cp 命令的语法如下:

mc [GLOBALFLAGS] cp                                                        \
                 [--attr "string"]                                         \
                 [--disable-multipart]                                     \
                 [--enc-kms "string"]                                      \
                 [--enc-s3 "string"]                                       \
                 [--enc-c "string"]                                        \
                 [--legal-hold "on"]                                       \
                 [--limit-download string]                                 \
                 [--limit-upload string]                                   \
                 [--md5]                                                   \
                 [--newer-than "string"]                                   \
                 [--older-than "string"]                                   \
                 [--preserve]                                              \
                 [--recursive]                                             \
                 [--retention-mode "string" --retention-duration "string"] \
                 [--rewind "string"]                                       \
                 [--storage-class "string"]                                \
                 [--tags "string"]                                         \
                 [--version-id "string"]                                   \
                 [--zip]                                                   \
                 SOURCE [SOURCE ...]                                       \
                 TARGET
  • 方括号 [] 表示可选参数。

  • 同一行中的参数彼此相互依赖。

  • 使用管道符 | 分隔的参数彼此互斥。

请先将示例复制到文本编辑器中并按需修改,再在终端 / shell 中运行命令。

参数

SOURCE
Required

要复制的对象。

如需从 MinIO 复制对象,请指定该对象的 alias 和完整路径 (例如存储桶和对象路径)。 例如:

mc cp play/mybucket/object.txt ~/mydata/object.txt

指定多个 SOURCE 路径可将多个对象复制到指定的 TARGETmc cp 将最后一个指定的 alias 或文件系统路径视为 TARGET。 例如:

mc cp ~/data/object.txt myminio/mydata/object.txt play/mydata/

如需从本地文件系统复制对象,请指定该对象的完整路径。 例如:

mc cp ~/mydata/object.txt play/mybucket/object.txt

如果在 SOURCE 中指定的是目录或存储桶, 还必须指定 --recursive 以递归复制该目录或存储桶中的内容。 如果省略 --recursive 参数,cp 仅复制指定目录或存储桶顶层中的对象。

TARGET
Required

mc cp 复制对象的目标完整路径。

如需将对象复制到 MinIO, 请指定该对象的 alias 和完整路径 (例如存储桶和对象路径)。例如:

mc cp ~/mydata/object.txt play/mybucket/object.txt

如需将对象复制到本地文件系统,请指定该对象的完整 路径。例如:

mc cp play/mybucket/object.txt ~/mydata/object.txt
--attr
Optional

为对象添加自定义元数据。 以 KEY=VALUE\; 格式指定键值对。 例如,--attr key1=value1\;key2=value2\;key3=value3

--checksum
Optional

New in version RELEASE.2024-10-02T08-27-28Z.

为上传对象添加校验和。

有效值包括: - MD5 - CRC32 - CRC32C - SHA1 - SHA256

该标志依赖服务端 trailing headers,适用于 AWS 或 MinIO 目标。

--disable-multipart
Optional

为本次复制会话禁用分片上传。

--enc-kms

使用客户端管理的密钥,通过服务端 SSE-KMS 加密 对对象进行加密或解密。

该参数接受格式为 KEY=VALUE 的键值对。

KEY

对象的完整路径,格式为 alias/bucket/path/object.ext

你也可以只指定顶层路径,以便对该路径下的所有操作使用同一个加密密钥。

VALUE

指定外部 KMS 上已有的数据密钥。

关于如何创建数据密钥,请参见 mc admin kms key create 参考文档。

例如:

--enc-kms "myminio/mybucket/prefix/object.obj=mybucketencryptionkey"

你可以通过重复该参数来指定多个加密密钥。

也可以指定某个前缀路径,对该路径下所有匹配对象应用加密:

--enc-kms "myminio/mybucket/prefix/=mybucketencryptionkey"
--enc-s3
Optional

使用 KMS 管理的密钥,通过服务端 SSE-S3 加密 对对象进行加密或解密。 指定对象的完整路径,格式为 alias/bucket/prefix/object

例如:

--enc-s3 "myminio/mybucket/prefix/object.obj"

你可以多次指定该参数,以表示不同的待加密对象:

--enc-s3 "myminio/mybucket/foo/fooobject.obj" --enc-s3 "myminio/mybucket/bar/barobject.obj"

也可以指定某个前缀路径,对该路径下所有匹配对象应用加密:

--enc-s3 "myminio/mybucket/foo"
--enc-c
Optional

使用客户端管理的密钥,通过服务端 SSE-C 加密 对对象进行加密或解密。

该参数接受格式为 KEY=VALUE 的键值对。

KEY

对象的完整路径,格式为 alias/bucket/path/object.ext

你也可以只指定顶层路径,以便对该路径下的所有操作使用同一个加密密钥。

VALUE

指定用于 SSE-C 加密的密钥,可以是 32 字节 RawBase64 编码密钥, 也可以是 64 字节十六进制编码密钥。

Raw Base64 编码 不接受= 填充的密钥。 请去掉填充,或使用支持 RAW 格式的 Base64 编码器。

  • KEY - 对象的完整路径,格式为 alias/bucket/path/object

  • VALUE - 用于加密对象的 32 字节 RAW Base64 编码数据密钥。

例如:

# RawBase64-Encoded string "mybucket32byteencryptionkeyssec"
--enc-c "myminio/mybucket/prefix/object.obj=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

你可以通过重复该参数来指定多个加密密钥。

也可以指定某个前缀路径,对该路径下所有匹配对象应用加密:

--enc-c "myminio/mybucket/prefix/=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

Note

MinIO 强烈不建议在生产负载中使用 SSE-C 加密。 请改用 --enc-kms 参数启用 SSE-KMS,或使用 --enc-s3 参数启用 SSE-S3。

Optional

为复制后的对象启用无限期的 legal hold 对象锁定。

指定 on

--limit-download
Optional

将客户端侧下载速率限制为不超过指定值,单位可以是 KiB/s、MiB/s 或 GiB/s。 这只影响下载到运行 MinIO Client 的本地设备的速度。 有效单位包括:

  • B 表示字节

  • K 表示千字节

  • M 表示兆字节

  • G 表示吉字节

  • T 表示太字节

  • Ki 表示二进制千字节

  • Mi 表示二进制兆字节

  • Gi 表示二进制吉字节

  • Ti 表示二进制太字节

例如,如需将下载速率限制为不超过 1 GiB/s,请使用以下命令:

--limit-download 1G

如果未指定,MinIO 将使用不受限制的下载速率。

--limit-upload
Optional

将客户端侧上传速率限制为不超过指定值,单位可以是 KiB/s、MiB/s 或 GiB/s。 这只影响从运行 MinIO Client 的本地设备发起的上传速度。 有效单位包括:

  • B 表示字节

  • K 表示千字节

  • M 表示兆字节

  • G 表示吉字节

  • T 表示太字节

  • Ki 表示二进制千字节

  • Mi 表示二进制兆字节

  • Gi 表示二进制吉字节

  • Ti 表示二进制太字节

例如,如需将上传速率限制为不超过 1 GiB/s,请使用以下命令:

--limit-upload 1G

如果未指定,MinIO 将使用不受限制的上传速率。

--md5
Optional

Changed in version RELEASE.2024-10-02T08-27-28Z: 已由 --checksum 标志替代。

强制所有上传计算 MD5 校验和。

--newer-than
Optional

复制比指定天数更新的对象。 以 #d#hh#mm#ss 格式指定字符串。 例如:--older-than 1d2hh3mm4ss

默认为 ``0``(所有对象)。

--older-than
Optional

复制早于指定时间限制的对象。 以 #d#hh#mm#ss 格式指定字符串。 例如:--older-than 1d2hh3mm4ss

默认为 ``0``(所有对象)。

--preserve, a
Optional

TARGET 存储桶中保留来自 SOURCE 目录、存储桶和对象的文件系统属性及存储桶策略规则。

--recursive, r
Optional

将每个 SOURCE 存储桶或目录中的内容递归复制到 TARGET 存储桶。

--retention-duration
Optional

要应用于复制对象的 WORM retention mode 持续时间。

#d#hh#mm#ss 格式的字符串指定持续时间。 例如:--retention-duration "1d2hh3mm4ss"

需要同时指定 --retention-mode

--retention-mode
Optional

在复制对象上启用 object locking mode。 支持以下取值:

  • GOVERNANCE

  • COMPLIANCE

需要同时指定 --retention-duration

--rewind
Optional

指示 mc cp 仅对指定时间点存在的对象版本执行操作。

  • 如需回溯到过去的特定日期,请将该日期指定为 ISO8601 格式的时间戳。 例如:--rewind "2020.03.24T10:00"

  • 如需按时间长度回溯,请将该时长指定为 #d#hh#mm#ss 格式的字符串。 例如:--rewind "1d2hh3mm4ss"

--rewind 要求指定的 SOURCE 指向支持 存储桶版本控制 的 S3 兼容服务。对于 MinIO 部署, 请使用 mc version 启用或禁用存储桶版本控制。

--storage-class, sc
Optional

TARGET 上的新对象设置存储类。

有关 S3 存储类的更多信息,请参见 https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html

--tags
Optional

为复制后的对象应用一个或多个标签。

KEY1=VALUE1&KEY2=VALUE2 形式指定由与号分隔的键值对, 其中每一对代表分配给对象的一个标签。

--version-id, vid
Optional

指示 mc cp 仅对指定的对象版本执行操作。

--version-id 要求指定的 SOURCE 指向支持 存储桶版本控制 的 S3 兼容服务。对于 MinIO 部署, 请使用 mc version 启用或禁用存储桶版本控制。

--zip
Optional

在复制期间,从 .zip 归档中提取文件。 仅当源归档文件位于 MinIO 部署中时生效。

全局标志

此命令支持 全局标志 中的任意选项。

示例

将对象复制到 S3

使用 mc cp 将对象复制到 S3 兼容主机:

mc cp SOURCE ALIAS/PATH
  • SOURCE 替换为对象的文件系统路径。

  • ALIAS 替换为已配置的 S3 兼容主机的 alias

  • PATH 替换为 S3 兼容主机上的对象路径。 你可以指定不同的对象名称,以便在复制时“重命名”对象。

mc cp SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • SRCALIAS 替换为源 S3 兼容主机的 alias

  • SRCPATH 替换为 S3 兼容主机上对象的路径。

  • TGTALIAS 替换为目标 S3 兼容主机的 alias

  • TGTPATH 替换为目标 S3 兼容主机上对象的路径。 省略对象名称可使用 SRCPATH 的对象名称。

递归复制对象到 S3

使用 mc cp --recursive 将对象递归复制到 S3 兼容主机:

mc cp --recursive SOURCE ALIAS/PATH
  • SOURCE 替换为包含文件的目录路径。

  • ALIAS 替换为已配置的 S3 兼容主机的 alias

  • PATH 替换为 S3 兼容主机上的对象路径。 mc cp 在目标主机创建对象时会使用 SOURCE 的文件名。

mc cp --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • SRCALIAS 替换为源 S3 兼容主机的 alias

  • SRCPATH 替换为源 S3 兼容主机上的 存储桶或存储桶前缀路径。

  • TGTALIAS 替换为目标 S3 兼容主机的 alias

  • TGTPATH 替换为目标 S3 兼容主机上的对象路径。 mc cp 在目标主机创建对象时会使用 SRCPATH 的对象名称。

复制对象的时间点版本

使用 mc cp --rewind 复制对象在某个特定时间点的状态。 该命令仅适用于 S3 到 S3 复制。

mc cp --rewind DURATION SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • DURATION 替换为要回溯复制对象的过去时间点。 例如,指定 30d 可复制当前日期前 30 天的对象版本。

  • SRCALIAS 替换为源 S3 兼容主机的 alias

  • SRCPATH 替换为源 S3 兼容主机上对象的路径。

  • TGTALIAS 替换为目标 S3 兼容主机的 alias

  • TGTPATH 替换为目标 S3 兼容主机上对象的路径。 省略对象名称可使用 SRCPATH 的对象名称。

需要版本控制

要使用此功能,mc cp 需要启用 存储桶版本控制。 请使用 mc version 在存储桶上启用版本控制。

复制对象的特定版本

使用 mc cp --version-id 复制对象的特定版本。 该命令仅适用于 S3 到 S3 复制。

mc cp --version-id VERSION SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • VERSION 替换为要复制的对象版本。

  • SRCALIAS 替换为源 S3 兼容主机的 alias

  • SRCPATH 替换为源 S3 兼容主机上对象的路径。

  • TGTALIAS 替换为目标 S3 兼容主机的 alias

  • TGTPATH 替换为目标 S3 兼容主机上对象的路径。 省略对象名称可使用 SRCPATH 的对象名称。

需要版本控制

要使用此功能,mc cp 需要启用 存储桶版本控制。 请使用 mc version 在存储桶上启用版本控制。

添加 content-type

使用 mc cp --attr 添加 content-type 值。 该命令仅适用于 S3 到 S3 复制。

mc cp --attr="content-type=CONTENT-TYPE" SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • CONTENT-TYPE 替换为所需的 content type(也称为 media type)。

  • SRCALIAS 替换为源 S3 兼容主机的 alias

  • SRCPATH 替换为源 S3 兼容主机上对象的路径。

  • TGTALIAS 替换为目标 S3 兼容主机的 alias

  • TGTPATH 替换为目标 S3 兼容主机上对象的路径。 省略对象名称可使用 SRCPATH 的对象名称。

以下示例将 content-type 设置为 application/json

 mc cp data.ndjson --attr="content-type=application/json" myminio/mybucket

行为

mc cp 使用 MD5SUM 校验和验证所有到对象存储的复制操作。

S3 兼容性

mc 命令行工具以兼容 AWS S3 API 为目标构建,并针对 MinIO 和 AWS S3 进行了测试,以验证预期的功能与行为。

对于其他 S3 兼容服务,MinIO 不提供任何保证,因为这些服务的 S3 API 实现未知, 因此不在支持范围内。虽然 mc 命令 可能 仍能按文档说明工作,但此类 用法需要你自行承担风险。