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 存储桶移动对象,请指定 alias 以及对象的完整路径(例如存储桶和对象路径)。例如:
mc mv play/mybucket/object.txt play/myotherbucket/object.txt
若要从本地文件系统移动对象,请指定该对象的完整路径。例如:
mc mv ~/mydata/object.txt play/mybucket/object.txt
指定多个
SOURCE路径可将多个对象移动到指定的TARGET。mc rm将*最后一个*指定的 alias 或文件系统路径 视为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
禁用 multipart upload 功能。
Multipart upload 会将对象拆分为多个独立分片。 每个分片可独立上传,且顺序不限。 如果任一分片上传失败,MinIO 会仅重试该分片而不影响其他分片。 上传完成后,这些分片会合并还原为原始对象。
MinIO 建议对大于 100 MB 的对象使用 multipart upload。 有关 multipart upload 的更多信息,请参阅 Amazon S3 documentation
- --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
使用 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
- 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"
Note
MinIO 强烈不建议在生产负载中使用 SSE-C 加密。 请改用
--enc-kms参数启用 SSE-KMS,或使用--enc-s3参数启用 SSE-S3。
- --limit-download
- 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
- 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 将使用不受限制的上传速率。
- --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 storage class 的更多信息,请参阅 Amazon 文档 Storage Classes。
全局标志
此命令支持 全局标志 中的任意选项。
示例
将文件从文件系统移动到 S3-Compatible Host
mc mv [--recursive] FILEPATH ALIAS/PATH
将文件从文件系统移动到 S3-Compatible Host 并附带自定义元数据
使用带 --attr 选项的 mc mv,
可为文件设置自定义属性。
mc mv --attr "ATTRIBUTES" FILEPATH ALIAS/PATH
在 S3-Compatible 服务之间移动存储桶
mc mv --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
将文件移动到 S3-Compatible Host 并指定存储类别
使用带 --storage-class 选项的 mc mv,
可在目标 S3-compatible host 上设置存储类别。
mc mv --storage-class CLASS FILEPATH ALIAS/PATH
行为
移动时的对象名称
如果未显式指定目标对象名,在将对象移动到
TARGET 时,MinIO 会使用
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 进行了测试,以验证预期的功能与行为。
对于其他 S3 兼容服务,MinIO 不提供任何保证,因为这些服务的 S3 API 实现未知, 因此不在支持范围内。虽然 mc 命令 可能 仍能按文档说明工作,但此类 用法需要你自行承担风险。