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
路径以将多个对象移动到指定的TARGET
。mc 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 mv
将TARGET
视为SOURCE
处所有对象的桶前缀。
- --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 bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
for tebibytes
例如,如果要将下载速率限制在不超过1 GiB/s,可以使用以下命令:
--limit-download 1G
如果未指定,MinIO 将使用不限下载速率。
- --limit-upload
- :optional:
将客户端的上传速率限制在规定的KiB/s、MiB/s或GiB/s以下。 这只影响运行MinIO Client的本地设备的上传。 有效的单位包括:
B
for bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
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
(所有对象)。
- --storage-class
- Optional
为
TARGET
上的新对象 设置存储类别。更多信息关于S3存储类别, 请参阅Amazon的文档: :aws-docs:`Storage Classes <AmazonS3/latest/dev/storage-class-intro.html>`_。
全局标记
此命令支持任何 全局标志。
示例
将文件从文件系统移动到 S3 兼容主机
mc mv [--recursive] FILEPATH ALIAS/PATH
将文件从文件系统移动到具有自定义元数据的S3兼容主机
使用 mc mv
命令配合 --attr
选项来为文件设置自定义属性。
mc mv --attr "ATTRIBUTES" FILEPATH ALIAS/PATH
在S3兼容的服务之间移动存储桶。
mc mv --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
将文件移动到具有特定存储类别的 S3 兼容主机
使用 mc mv
命令配合 --storage-class
选项来为目的地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.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 命令 可能 如文档中所 述工作,但任何此类使用都是您自己的风险。