中文文档

mc mv

语法

mc mv 命令可以将对象从源移动到目标,例如在不同的 MinIO 部署之间, 或者 在同一 MinIO 部署中的不同桶之间。 mc mv 命令还支持将对象在本地文件系统和 MinIO 之间移动。

你还可以使用 mc mv 对本地文件系统执行 操作,以产生类似于命令行工具 mv 的结果。

以下命令将对象从 mydata 桶移动到 archive 桶, 该桶位于 myminio MinIO 部署上:

mc mv --recursive myminio/mydata myminio/archive

该命令具有以下语法:

mc [GLOBALFLAGS] mv         \
[--attr "string"]           \
[--disable-multipart]       \
[--enc-kms "string"]        \
[--enc-s3 "string"]         \
[--enc-c "string"]          \
[--limit-download string]   \
[--limit-upload string]     \
[--newer-than "string"]     \
[--older-than "string"]     \
[--preserve]                \
[--recursive]               \
[--storage-class "string"]  \
SOURCE [SOURCE...]          \
TARGET
  • 方括号 [] 表示可选参数。

  • 参数在同一行表示它们是相互依赖的。

  • 使用管道 | 运算符分隔的参数是相互排斥的。

在终端/壳中运行命令之前,将示例复制到文本编辑器中并按需进行修改。

参数

SOURCE
:required:

要移动的一个或多个对象。

要移动 MinIO 桶中的对象,请指定 alias (别名) 和对象的全路径(例如,桶和对象的路径)。 例如:

mc mv play/mybucket/object.txt play/myotherbucket/object.txt

要从本地文件系统移动一个对象,请指定该对象的全路径。 例如:

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

指定多个 SOURCE 路径以将多个对象移动到指定的 TARGETmc rm最后 一个指定的别名或文件 系统路径视为 TARGET 。 例如:

mc mv ~/mydata/object.txt play/mydata/otherobject.txt myminio/mydata

如果您指定了一个目录或桶作为 SOURCE 的目标, 您还必须指定 --recursive 以 递归地移动该目录的内容。如果您省略了 --recursive 参数, mv 只会移动指定目录或桶顶层的对象。

TARGET
Required

命令要将对象(或多个对象)移动到的指定 SOURCE 的桶的全路径。 将配置好的 S3 服务的 alias (别名)作为 TARGET 路径的前缀来指定。

要从 MinIO 中移动一个对象, 请指定 alias (别名) 和对象的全路径(例如,桶和对象的路径)。

mc mv play/mybucket/object.txt play/myotherbucket/object.txt

要从本地文件系统移动一个对象,请指定该对象的全路径。 例如:

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

在移动操作中, TARGET 对象名称可以与 SOURCE 不同,以此来在新的位置重新命名对象。

如果使用 --recursive 选项运行 mc mv 命令,mc mvTARGET 视为 SOURCE 处所有对象的桶前缀。

--attr
Optional

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

--disable-multipart
Optional

禁用分段上传功能。

分段上传将一个对象分成一组单独的部分。 每个部分均以任意顺序单独上传。 如果任何单个分片上传失败,MinIO 会重新尝试该分片,而不会影响其他分片。 上传完成后,这些分片将合并以恢复原始对象。

MinIO 建议对于任何大于 100 MB 的对象使用分片上传。 有关分片上传的更多信息,请参考 Amazon S3 文档

--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

使用服务器端 SSE-S3 加密 和 KMS 管理的密钥加密或解密对象。 将对象的完整路径指定为 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 字节十六进制编码密钥。

原始 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。

--limit-download
Optional

将客户端的下载速率限制在指定的KiB/s、MiB/s或GiB/s之内。 只影响运行MinIO客户端的本地设备的下载。 有效的单位包括:

  • B for bytes

  • K for kilobytes

  • M for megabytes

  • G for gigabytes

  • T for terabytes

  • Ki for kibibytes

  • Mi for mibibytes

  • Gi for gibibytes

  • Ti for tebibytes

例如,如果要将下载速率限制在不超过1 GiB/s,可以使用以下命令:

--limit-download 1G

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

--limit-upload
:optional:

将客户端的上传速率限制在规定的KiB/s、MiB/s或GiB/s以下。 这只影响运行MinIO Client的本地设备的上传。 有效的单位包括:

  • B for bytes

  • K for kilobytes

  • M for megabytes

  • G for gigabytes

  • T for terabytes

  • Ki for kibibytes

  • Mi for mibibytes

  • Gi for gibibytes

  • Ti for tebibytes

例如,要将上传速率限制为不超过1 GiB/s,可以使用以下方法:

--limit-upload 1G

如果未指定,MinIO将使用无限上传速率。

--newer-than
Optional

删除指定天数内更新的对象。用 ##d#hh#mm#ss 格式的字符串来指定天数。 例如: --newer-than 1d2hh3mm4ss

默认为 0 (所有对象)。

--older-than
Optional

删除指定时间限制之前的对象。用 #d#hh#mm#ss 格式的字符串来指定时间限制。 例如: --older-than 1d2hh3mm4ss

默认为 0 (所有对象)。

--preserve, a
Optional

保留 SOURCE 目录、存储桶和对象在 TARGET 目标存储桶上的 文件系统属性和存储桶策略规则

--recursive, r
Optional

递归地将 SOURCE 每个存储桶或目录的 内容移动到 TARGET 目标存储桶中。

--storage-class
Optional

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

更多信息关于S3存储类别, 请参阅Amazon的文档: :aws-docs:`Storage Classes <AmazonS3/latest/dev/storage-class-intro.html>`_

全局标记

此命令支持任何 全局标志

示例

将文件从文件系统移动到 S3 兼容主机

mc mv [--recursive] FILEPATH ALIAS/PATH
  • FILEPATH 替换为要移动的文件的 完整文件路径。

    如果指定目录的路径,请包含 --recursive 标志。

    mc mv 在成功将文件移动到目的地后, 会从源位置 删除 文件。

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

  • PATH 替换为目的地存储桶。

将文件从文件系统移动到具有自定义元数据的S3兼容主机

使用 mc mv 命令配合 --attr 选项来为文件设置自定义属性。

mc mv --attr "ATTRIBUTES" FILEPATH ALIAS/PATH
  • FILEPATH 替换为要移动的文件的 完整文件路径。mc mv 在成功将文件移动到目的地后, 会将文件从源位置 删除

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

  • PATH 替换为目的地存储桶。

  • ATTRIBUTES 替换为零个或多个用 逗号分隔的 KEY=VALUE 对。每一对表示一个属性 键和值。

在S3兼容的服务之间移动存储桶。

 mc mv --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
  • SRCALIAS 替换为已 配置的S3兼容主机的 别名

  • SRCPATH 替换为存储桶的路径。 mc mv 在成功将存储桶及其内容移动到目标 位置后,会从源位置 删除 存储桶及其内容。

  • TGTALIAS 替换为已 配置的S3兼容主机的 别名

  • TGTPATH 替换为存储桶的目标路径。

将文件移动到具有特定存储类别的 S3 兼容主机

使用 mc mv 命令配合 --storage-class 选项来为目的地S3兼容主机设置存储类。

mc mv --storage-class CLASS FILEPATH ALIAS/PATH
  • CLASS 替换 为要与文件关联的存储类。

  • FILEPATH 替换为要移动的文件的 完整文件路径。mc mv 在成功将文件移动到目的地后, 会将文件从源位置 删除

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

  • PATH 替换为目的地存储桶。

  • ATTRIBUTES 替换为零个或多个用 逗号分隔的 KEY=VALUE 对。每一对表示一个属性 键和值。

    mc mv –storage-class REDUCED_REDUNDANCY myobject.txt play/mybucket

行为

移动时的对象名称

如果未指定显式的目标对象名称,MinIO在将对象移动到 TARGET 时会使用 SOURCE 对象名称。

您可以为 TARGET 指定一个不同的对象名称, 使用相同的对象路径来进行 “重命名” 对象。 例如:

mc mv play/mybucket/object.txt play/mybucket/myobject.txt

对于递归移动操作 (mc mv --recursive ),MinIO 将 TARGET 路径视为 SOURCE 上对象的前缀。

校验和验证

mc mv 在执行所有移动操作时,会使用 MD5SUM 校验和来验证 对象存储。

MinIO 修剪对象删除时的空前缀

mc mv 依赖于 mc 删除 API 来删除对象。 在删除存储桶前缀中的最后一个对象时,mc 还会递归地删除前缀中的每个空部分,直到存储桶根目录。 mc 只对作为对象写入操作一部分 隐式 创建的 前缀应用递归删除 - 也就是说,前缀不是使用如 mc mb 的显式目录创建命令创建的。

例如, 假设有一个名为 photos 的存储桶,其包含以下对象前缀:

  • photos/2021/january/myphoto.jpg

  • photos/2021/february/myotherphoto.jpg

  • photos/NYE21/NewYears.jpg

photos/NYE21 是使用 mc mb 显式创建的*唯一*前缀。 所有其他前缀都是作为写入对象的一部分 隐式 创建的 位于该前缀。

如果一个 mc 命令删除了 myphoto.jpg , 删除 API 会自动删除空的前缀 /january 。 如果后续的 mc 命令删除了 myotherphoto.jpg , 删除 API 会自动删除 /february 前缀 以及 现在为空的 前缀 /2021 。如果一个 mc:mc 命令删除了 NewYears.jpg/NYE21 前缀保持不变,因为它是由 显式 创建的。

如果使用 mc mv 对文件系统进行操作, mc 会通过递归删除空目录路径直到根目录来应用相同的行为。 然而,mc 的删除 API 无法区分显式创建的目录路径 和隐式创建的目录路径。如果 mc mv 删除了 文件系统路径中的最后一个对象,mc 在删除操作 过程中会递归地删除该路径内所有的空目录,直到根目录。

S3兼容性

mc 命令行工具是为了与 AWS S3 API 兼容而构建的,并且已经过测试, 以确保在与 MinIO 和 AWS S3 配合使用时,功能和行为符合预期。

MinIO 不对其他 S3 兼容服务提供任何保证,因为它们的 S3 API 实现是 未知的,因此不受支持。尽管 mc 命令 可能 如文档中所 述工作,但任何此类使用都是您自己的风险。

Join Slack 商业支持购买咨询