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路径可将多个对象移动到指定的TARGET。mc 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 mv,mc mv会将TARGET视为SOURCE处所有对象的存储桶前缀。
- --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 将使用无限下载速率。
全局标志
该命令支持任何全局标志。
示例
将文件从文件系统移动到兼容S3的主机
mc mv [--recursive] FILEPATH ALIAS/PATH
将文件从文件系统移动到兼容S3的主机并附带自定义元数据
使用带 --attr 选项的 mc mv 来设置文件的自定义属性。
mc mv --attr "ATTRIBUTES" FILEPATH ALIAS/PATH
在兼容S3的服务之间移动存储桶
mc mv --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
将文件移动到兼容S3的主机并指定存储类别
使用带 --storage-class 选项的 mc mv 来设置目标兼容S3主机上的存储类别。
mc mv --storage-class CLASS FILEPATH ALIAS/PATH
行为
移动时的对象名称
如果未指定明确的目标对象名称,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.jpgphotos/2021/february/myotherphoto.jpgphotos/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 命令可能会按文档所述工作,但任何此类使用均由您自担风险。