跳转到主要内容

mc cp

语法

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

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

说明

说明

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

mc-cmd

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

mc-cmd

Required

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

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

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

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

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

mc-cmd

Optional

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

--checksum

mc-cmd

Optional

说明

新增: RELEASE.2024-10-02T08-27-28Z

为上传对象添加校验和。

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

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

--disable-multipart

mc-cmd

Optional

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

--enc-kms

mc-cmd

使用客户端管理的密钥,通过服务端 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

mc-cmd

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

mc-cmd

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"
说明

说明

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

mc-cmd

Optional

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

指定 on

--limit-download

mc-cmd

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

mc-cmd

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

mc-cmd

Optional

说明

变更: RELEASE.2024-10-02T08-27-28Z

已由 --checksum 标志替代。

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

--newer-than

mc-cmd

Optional

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

默认为 0(所有对象)。

--older-than

mc-cmd

Optional

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

默认为 0(所有对象)。

--preserve, a

mc-cmd

Optional

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

--recursive, r

mc-cmd

Optional

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

--retention-duration

mc-cmd

Optional

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

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

需要同时指定 --retention-mode

--retention-mode

mc-cmd

Optional

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

  • GOVERNANCE
  • COMPLIANCE

需要同时指定 --retention-duration

--rewind

mc-cmd

Optional

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

  • 如需回溯到过去的特定日期,请将该日期指定为 ISO8601 格式的时间戳。 例如:--rewind "2020.03.24T10:00"
  • 如需按时间长度回溯,请将该时长指定为 #d#hh#mm#ss 格式的字符串。 例如:--rewind "1d2hh3mm4ss"

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

--storage-class, sc

mc-cmd

Optional

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

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

--tags

mc-cmd

Optional

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

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

--version-id, vid

mc-cmd

Optional

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

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

--zip

mc-cmd

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 命令 可能 仍能按文档说明工作,但此类 用法需要你自行承担风险。