mc mv
Syntax
The mc mv
command moves an object from source to the target, such as
between MinIO deployments or between buckets on the same MinIO deployment.
mc mv
also supports moving objects between a local filesystem and MinIO.
You can also use mc mv
against the local filesystem to produce
similar results to the mv
commandline tool.
The following command moves objects from the mydata
bucket to the
archive
bucket on the myminio
MinIO deployment:
mc mv --recursive myminio/mydata myminio/archive
The command has the following syntax:
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
Brackets
[]
indicate optional parameters.Parameters sharing a line are mutually dependent.
Parameters separated using the pipe
|
operator are mutually exclusive.
Copy the example to a text editor and modify as-needed before running the command in the terminal/shell.
Parameters
- SOURCE
- :required:
The object or objects to move.
For moving an object from a MinIO bucket, specify the alias and the full path to the object(s) (e.g. bucket and path to objects). For example:
mc mv play/mybucket/object.txt play/myotherbucket/object.txt
For moving an object from a local filesystem, specify the full path to that object. For example:
mc mv ~/mydata/object.txt play/mybucket/object.txt
Specify multiple
SOURCE
paths to move multiple objects to the specifiedTARGET
.mc rm
treats the last specified alias or filesystem path as theTARGET
. For example:mc mv ~/mydata/object.txt play/mydata/otherobject.txt myminio/mydata
If you specify a directory or bucket to
SOURCE
, you must also specify--recursive
to recursively move the contents of that directory. If you omit the--recursive
argument,mv
only moves objects in the top level of the specified directory or bucket.
- TARGET
- Required
The full path to the bucket to which the command moves the object(s) at the specified
SOURCE
. Specify the alias of a configured S3 service as the prefix to theTARGET
path.For moving an object from MinIO, specify the alias and hte full path to the object(s) (e.g. bucket and path to objects). For example:
mc mv play/mybucket/object.txt play/myotherbucket/object.txt
For moving an object from a local filesystem, specify the full path to that object. For example:
mc mv ~/mydata/object.txt play/mybucket/object.txt
The
TARGET
object name can differ from theSOURCE
to “rename” the object as part of the move operation.If running
mc mv
with the--recursive
option,mc mv
treats theTARGET
as the bucket prefix for all objects at theSOURCE
.
- --attr
- Optional
Add custom metadata for the object. Specify key-value pairs as
KEY=VALUE\;
. For example,--attr key1=value1\;key2=value2\;key3=value3
.
- --disable-multipart
- Optional
Disables the multipart upload feature.
Multipart upload breaks an object into a set of separate parts. Each part uploads individually and in any order. If any individual part upload fails, MinIO retries that part without affecting the other parts. After upload completes, the parts combine to restore the original object.
MinIO recommends using multipart upload for any object larger than 100 MB. For more information on multipart upload, refer to the Amazon S3 documentation
- --enc-kms
Encrypt or decrypt objects using server-side SSE-KMS encryption with client-managed keys.
The parameter accepts a key-value pair formatted as
KEY=VALUE
KEY
The full path to the object as
alias/bucket/path/object.ext
.You can specify only the top-level path to use a single encryption key for all operations in that path.
VALUE
Specify an existing data key on the external KMS.
See the
mc admin kms key create
reference for creating data keys.For example:
--enc-kms "myminio/mybucket/prefix/object.obj=mybucketencryptionkey"
You can specify multiple encryption keys by repeating the parameter.
Specify the path to a prefix to apply encryption to all matching objects at that path:
--enc-kms "myminio/mybucket/prefix/=mybucketencryptionkey"
- --enc-s3
- Optional
Encrypt or decrypt objects using server-side SSE-S3 encryption with KMS-managed keys. Specify the full path to the object as
alias/bucket/prefix/object
.For example:
--enc-s3 "myminio/mybucket/prefix/object.obj"
You can specify the parameter multiple times to denote different object(s) to encrypt:
--enc-s3 "myminio/mybucket/foo/fooobject.obj" --enc-s3 "myminio/mybucket/bar/barobject.obj"
Specify the path to a prefix to apply encryption to all matching objects at that path:
--enc-s3 "myminio/mybucket/foo"
- --enc-c
- Optional
Encrypt or decrypt objects using server-side SSE-C encryption with client-managed keys.
The parameter accepts a key-value pair formatted as
KEY=VALUE
KEY
The full path to the object as
alias/bucket/path/object.ext
.You can specify only the top-level path to use a single encryption key for all operations in that path.
VALUE
Specify either a 32-byte RawBase64-encoded key or a 64-byte hex-encoded key for use with SSE-C encryption.
Raw Base64 encoding rejects
=
-padded keys. Omit the padding or use a Base64 encoder that supports RAW formatting.KEY
- the full path to the object asalias/bucket/path/object
.VALUE
- the 32-byte RAW Base64-encoded data key to use for encrypting object(s).
For example:
# RawBase64-Encoded string "mybucket32byteencryptionkeyssec" --enc-c "myminio/mybucket/prefix/object.obj=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"
You can specify multiple encryption keys by repeating the parameter.
Specify the path to a prefix to apply encryption to all matching objects at that path:
--enc-c "myminio/mybucket/prefix/=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"
Note
MinIO strongly recommends against using SSE-C encryption in production workloads. Use SSE-KMS via the
--enc-kms
or SSE-S3 via--enc-s3
parameters instead.
- --limit-download
- Optional
Limit client-side download rates to no more than a specified rate in KiB/s, MiB/s, or GiB/s. This affects only the download to the local device running the MinIO Client. Valid units include:
B
for bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
for tebibytes
For example, to limit download rates to no more than 1 GiB/s, use the following:
--limit-download 1G
If not specified, MinIO uses an unlimited download rate.
- --limit-upload
- Optional
Limit client-side upload rates to no more than the specified rate in KiB/s, MiB/s, or GiB/s. This affects only the upload from the local device running the MinIO Client. Valid units include:
B
for bytesK
for kilobytesM
for megabytesG
for gigabytesT
for terabytesKi
for kibibytesMi
for mibibytesGi
for gibibytesTi
for tebibytes
For example, to limit upload rates to no more than 1 GiB/s, use the following:
--limit-upload 1G
If not specified, MinIO uses an unlimited upload rate.
- --newer-than
- Optional
Remove object(s) newer than the specified number of days. Specify a string in
##d#hh#mm#ss
format. For example:--newer-than 1d2hh3mm4ss
.Defaults to
0
(all objects).
- --older-than
- Optional
Remove object(s) older than the specified time limit. Specify a string in
#d#hh#mm#ss
format. For example:--older-than 1d2hh3mm4ss
.Defaults to
0
(all objects).
- --preserve, a
- Optional
Preserve file system attributes and bucket policy rules of the
SOURCE
directories, buckets, and objects on theTARGET
bucket(s).
- --recursive, r
- Optional
Recursively move the contents of each bucket or directory
SOURCE
to theTARGET
bucket.
- --storage-class
- Optional
Set the storage class for the new object(s) on the
TARGET
.See the Amazon documentation on Storage Classes for more information on S3 storage classses.
Global Flags
This command supports any of the global flags.
Examples
Move Files from Filesystem to S3-Compatible Host
mc mv [--recursive] FILEPATH ALIAS/PATH
Replace
FILEPATH
with the full file path to the file to move.If specifying the path to a directory, include the
--recursive
flag.mc mv
removes the files from the source after successfully moving it to the destination.Replace
ALIAS
with thealias
of a configured S3-compatible host.Replace
PATH
with the destination bucket.
Move a File from Filesystem to S3-Compatible Host with Custom Metadata
Use mc mv
with the --attr
option to set custom
attributes on file(s).
mc mv --attr "ATTRIBUTES" FILEPATH ALIAS/PATH
Replace
FILEPATH
with the full file path to the file to move.mc mv
removes the file from the source after successfully moving it to the destination.Replace
ALIAS
with thealias
of a configured S3-compatible host.Replace
PATH
with the destination bucket.Replace
ATTRIBUTES
with one or more comma-separated key-value pairsKEY=VALUE
. Each pair represents one attribute key and value.
Move Bucket Between S3-Compatible Services
mc mv --recursive SRCALIAS/SRCPATH TGTALIAS/TGTPATH
Replace
SRCALIAS
with thealias
of a configured S3-compatible host.Replace
SRCPATH
with the path to the bucket.mc mv
removes the bucket and its contents from the source after successfully moving it to the destination.Replace
TGTALIAS
with thealias
of a configured S3-compatible host.Replace
TGTPATH
with the path to the bucket.
Move File to S3-Compatible Host with Specific Storage Class
Use mc mv
with the --storage-class
option to set
the storage class on the destination S3-compatible host.
mc mv --storage-class CLASS FILEPATH ALIAS/PATH
Replace
CLASS
with the storage class to associate to the files.Replace
FILEPATH
with the full file path to the file to move.mc mv
removes the file from the source after successfully moving it to the destination.Replace
ALIAS
with thealias
of a configured S3-compatible host.Replace
PATH
with the destination bucket.Replace
ATTRIBUTES
with one or more comma-separated key-value pairsKEY=VALUE
. Each pair represents one attribute key and value.mc mv –storage-class REDUCED_REDUNDANCY myobject.txt play/mybucket
Behavior
Object Names on Move
MinIO uses the SOURCE
object name when moving
the object to the TARGET
if no explicit target
object name is specified.
You can specify a different object name for the
TARGET
with the same object path to “rename”
an object. For example:
mc mv play/mybucket/object.txt play/mybucket/myobject.txt
For recursive move operations (mc mv --recursive
), MinIO
treats the TARGET
path as a prefix for objects on the SOURCE
.
Checksum Verification
mc mv
verifies all move operations to object storage using MD5SUM
checksums.
MinIO Trims Empty Prefixes on Object Removal
mc mv
relies on the mc
removal API for deleting objects. As part of
removing the last object in a bucket prefix, mc
also recursively removes
each empty part of the prefix up to the bucket root. mc
only applies the
recursive removal to prefixes created implicitly as part of object write
operations - that is, the prefix was not created using an explicit directory
creation command such as mc mb
.
For example, consider a bucket photos
with the following object prefixes:
photos/2021/january/myphoto.jpg
photos/2021/february/myotherphoto.jpg
photos/NYE21/NewYears.jpg
photos/NYE21
is the only prefix explicitly created using mc mb
.
All other prefixes were implicitly created as part of writing the object
located at that prefix.
If an mc
command removes myphoto.jpg
, the removal API automatically
trims the empty /january
prefix. If a subsequent mc
command removes
myotherphoto.jpg
, the removal API automatically trims both the /february
prefix and the now-empty /2021
prefix. If an mc
command removes
NewYears.jpg
, the /NYE21
prefix remains in place since it was
explicitly created.
If using mc mv
for operations on a filesystem, mc
applies this same
behavior by recursively trimming empty directory paths up to the root. However,
the mc
remove API cannot distinguish between an explicitly created
directory path and an implicitly created one. If mc mv
deletes the last
object at a filesystem path, mc
recursively deletes all empty directories
within that path up to the root as part of the removal operation.
S3 Compatibility
The mc commandline tool is built for compatibility with the AWS S3 API and is tested with MinIO and AWS S3 for expected functionality and behavior.
MinIO provides no guarantees for other S3-compatible services, as their S3 API implementation is unknown and therefore unsupported. While mc commands may work as documented, any such usage is at your own risk.