文档

mc mv

语法

mc mv 命令将一个对象从源移动到目标,例如在 MinIO 部署之间在同一 MinIO 部署的存储桶之间移动。mc mv 也支持在本地文件系统和 MinIO 之间移动对象。

你也可以在本地文件系统上使用 mc mv,以产生与 mv 命令行工具相似的结果。

以下命令将对象从 mydata 存储桶移动到 myminio MinIO 部署上的 archive 存储桶中。

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
  • 方括号 [] 表示可选参数。

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

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

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

参数

SOURCE
:required:

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

要从 MinIO 存储桶移动对象,请指定别名和对象的完整路径(例如,存储桶和对象路径)。例如:

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

命令将指定的 SOURCE 处的对象移动到的存储桶的完整路径。将已配置的 S3 服务的别名指定为 TARGET 路径的前缀。

要从 MinIO 移动对象,请指定别名和对象的完整路径(例如,存储桶和对象路径)。例如:

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

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

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

TARGET 对象的名称可以与 SOURCE 不同,以便在移动操作中“重命名”对象。

如果使用 --recursive 选项运行 mc mvmc mv 会将 TARGET 视为 SOURCE 处所有对象的存储桶前缀。

--attr
可选

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

--disable-multipart
可选

禁用分段上传功能。

分段上传将一个对象分成一组独立的部分。每个部分单独上传,并且可以按任意顺序上传。如果任何单个部分的上传失败,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
可选

使用 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
可选

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

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

KEY

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

您可以仅指定顶层路径,以便对该路径中的所有操作使用单个加密密钥。

VALUE

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

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 参数。

--limit-download
可选

将客户端下载速率限制为不超过指定的速率(单位为 KiB/s、MiB/s 或 GiB/s)。这仅影响到运行 MinIO 客户端的本地设备的下载。有效单位包括:

  • B 代表字节

  • K 代表千字节

  • M 代表兆字节

  • G 代表吉字节

  • T 代表太字节

  • Ki 代表千位字节

  • Mi 代表兆位字节

  • Gi 代表吉位字节

  • Ti 代表太位字节

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

--limit-download 1G

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

--limit-upload
可选

将客户端上传速率限制为不超过指定的速率(单位为 KiB/s、MiB/s 或 GiB/s)。这只影响从运行 MinIO 客户端的本地设备上传。有效单位包括:

  • B 代表字节

  • K 代表千字节

  • M 代表兆字节

  • G 代表吉字节

  • T 代表太字节

  • Ki 代表千位字节

  • Mi 代表兆位字节

  • Gi 代表吉位字节

  • Ti 代表太位字节

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

--limit-upload 1G

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

--newer-than
可选

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

默认为 0(所有对象)。

--older-than
可选

移除比指定时间限制更旧的对象。以 #d#hh#mm#ss 格式指定字符串。例如:--older-than 1d2hh3mm4ss

默认为 0(所有对象)。

--preserve, a
可选

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

--recursive, r
可选

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

--storage-class
可选

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

有关 S3 存储类别的更多信息,请参阅 Amazon 关于存储类别的文档。

全局标志

该命令支持任何全局标志

示例

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

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

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

    mc mv 在成功将文件移动到目标后会从源移除这些文件。

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

  • PATH 替换为目标存储桶。

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

使用带 --attr 选项的 mc mv 来设置文件的自定义属性。

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主机的 alias

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

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

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

将文件移动到兼容S3的主机并指定存储类别

使用带 --storage-class 选项的 mc mv 来设置目标兼容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 命令移除了 NewYears.jpg/NYE21 前缀将保持不变,因为它被显式地创建过。

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

S3 兼容性

mc 命令行工具旨在与 AWS S3 API 兼容,并已在 MinIO 和 AWS S3 上测试,以确保其预期的功能和行为。

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

English 中文