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客户端的本地设备的下载。 有效的单位包括: - Bfor bytes
- Kfor kilobytes
- Mfor megabytes
- Gfor gigabytes
- Tfor terabytes
- Kifor kibibytes
- Mifor mibibytes
- Gifor gibibytes
- Tifor tebibytes
 例如,如果要将下载速率限制在不超过1 GiB/s,可以使用以下命令: --limit-download 1G 如果未指定,MinIO 将使用不限下载速率。 
- --limit-upload
- :optional:
- 将客户端的上传速率限制在规定的KiB/s、MiB/s或GiB/s以下。 这只影响运行MinIO Client的本地设备的上传。 有效的单位包括: - Bfor bytes
- Kfor kilobytes
- Mfor megabytes
- Gfor gigabytes
- Tfor terabytes
- Kifor kibibytes
- Mifor mibibytes
- Gifor gibibytes
- Tifor 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 命令 可能 如文档中所 述工作,但任何此类使用都是您自己的风险。
