更新时间:2022-08-29 GMT+08:00
分享

移动对象

使用mv命令移动对象或批量移动对象。

命令结构

health mv <object> <object-dest> [flags]
表1 参数说明

参数

简写

是否必选

说明

object

  • 移动对象时必选
  • 批量移动时可选

移动对象时的源对象名,或批量移动时源对象名前缀。

规则如下:

  • 移动对象时,该值不能为空;如果object-dest为空,则将源对象移动到目标桶的根目录;如果object-dest以“/”结尾,则目标对象名为object-dest+源对象名;否则,目标对象名为object-dest。
  • 批量移动时,如果该值为空,则移动源桶中的所有对象;否则,移动源桶中以该值为对象名前缀的所有对象。目标对象名的确认规则为:
    • 如果object-dest以“/”结尾,目标对象名为object-dest+源对象名。
    • 如果object-dest不以“/”结尾,目标对象名为object-dest+/+源对象名。
    说明:
    • 当移动对象是文件夹时,如果object以“/”结尾,object-dest没有以“/”结尾,会将object中的所有文件移动至object-dest中,文件夹名称与object-dest一致;如果object没有以“/”结尾,object-dest结尾无论加“/”或不加“/”,都会将object移动到object-dest目录下。
    • 可参考命令结构了解该参数的使用方式。

object-dest

目标路径。

--fr

-R

移动对象时生成结果清单文件。移动对象时该参数可选 。

--flat

-l

移动时,不包含上一级父对象名前缀。批量移动时该参数可选 。

--dryRun

-y

测试模式运行,不执行实际的移动操作。

--update

-u

增量移动操作,设置该参数后,移动每个源对象时会对比目标桶中对应路径的目标对象,仅在目标对象不存在,或者目标对象大小与源对象大小不一致,或者目标对象的最后修改时间早于源对象的最后修改时间时进行移动。

如果目标对象与源对象大小以及修改时间都一致,此时会直接删除源对象,而不进行移动操作。

--parallel

-p

每个分段移动任务的最大并发数,默认为配置文件中的defaultParallels。

--threshold

-t

开启分段移动任务的阈值,单位:字节,默认为配置文件中的defaultBigfileThreshold。

如果待移动的源对象小于该阈值,则使用直接移动模式;否则使用分段移动模式。直接移动模式不会产生断点记录文件,不支持断点续传。支持带容量单位配置,例如,配置1MB代表1048576字节。

--versionId

-V

移动单个对象时可指定的源对象版本号。

POSIX桶无version概念,故POSIX桶不支持versionId选项。

移动对象时该参数可选。

--acl

-a

移动对象时可指定的目标对象的预定义访问策略。支持的值:

  • private:私有读写
  • public-read:公共读
  • public-read-write:公共读写
  • bucket-owner-full-control:桶拥有者完全控制

--meta

-E

移动对象时可指定的目标对象的自定义元数据。格式为:key1:value1#key2:value2#key3:value3。

以上值表示移动对象完成后,桶内目标对象包含三组自定义元数据,分别为:key1:value1、key2:value2、key3:value3。

--ps

-s

每个分段移动任务的段大小,单位:字节,取值范围是100KB~5GB,默认为配置文件中的defaultPartSize。

支持带容量单位配置,例如,配置1MB代表1048576字节。支持配置为auto,此时obsutil会根据源对象大小自动设置每个分段任务的段大小。

--cpd

-C

生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。

每个分段移动任务会产生唯一对应的断点记录文件并保存至该文件夹的copy子文件夹下,分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。

--recursive

-r

按指定源桶的对象名前缀批量移动对象。批量移动时该参数可选。

--force

-f

强制操作,不进行询问提示。 批量移动时该参数可选。

--jobs

-j

批量移动时的最大并发数,默认为配置文件中的defaultJobs。**说明:**工具会保证该值至少为1。

批量移动时该参数可选。

--exclude

-x

不包含源对象的匹配模式,如:*.txt。批量移动时该参数可选。

支持“*”匹配多个任意字符和“?”匹配单个任意字符。例如,abc*.txt代表匹配以abc开头以.txt结尾的任意文件。

您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。如果待移动的对象名匹配该参数,则跳过该对象的移动。

建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。该匹配模式仅适用于对象名非“/”结尾的对象。

支持指定多个exclude参数,如--exclude *.xxx --exclude *.xxx 。

--include

-l

包含源对象的匹配模式,如:*.jpg。批量移动时该参数可选。

支持“*”匹配多个任意字符和“?”匹配单个任意字符。

您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。首先执行exclude的匹配规则,如果待移动的对象名不匹配exclude,则判断待移动的对象名是否匹配该参数,如果匹配则移动该对象,否则跳过该文件的复制。

建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。该匹配模式仅适用于对象名非“/”结尾的对象。

支持指定多个include参数,如--include *.xxx --include *.xxx 。

--timeRange

-T

移动对象时的时间段匹配模式,仅移动最后修改时间在该时间段内的对象。该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。

使用“time1-time2”,代表匹配的时间段,其中time1必须小于等于time2,格式为yyyyMMddHHmmss。时间格式支持自动补全,例如yyyyMMdd等价于yyyyMMdd000000,yyyyMM等价于yyyyMM01000000。

使用“*-time2”,代表匹配最后修改时间在time2之前的所有文件。

使用“time1-*”,代表匹配最后修改时间time1之后的所有文件。

该匹配模式表示的时间是UTC时间。该匹配模式仅适用于对象名非“/”结尾的对象。

--mf

-m

设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。

--o

-o

生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果和警告结果三个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。

结果清单文件命名规则:mv_{succeed | failed | warning}_report_时间_TaskId.txt。

单个结果清单文件默认情况下最大为30MB且最大可保留的文件个数为1024,可在配置文件中通过recordMaxLogSize和recordBackups分别配置。

当涉及多文件/文件夹时,如需确认失败任务的具体错误信息,可参考结果清单文件夹下的失败结果清单文件“mv_failed_report_时间_TaskId.txt”及日志路径下的日志文件

--e

-P

指定终端节点。

--i

-i

指定用户的AK。

--k

-k

指定用户的SK。

--t

-n

指定用户的securitytoken。

命令示例

本节以Windows为例介绍eihealth-toolkit的使用过程,Linux和macOS环境使用方法基本相同,可参考。

移动文件夹

示例1:将tmp文件夹中的所有文件移动至t1文件夹下,命令中tmp文件夹结尾需要加“/”,t1文件夹结尾无需加“/”。
health mv /tmp/ /t1  -r  -f --dryRun
# 返回结果如下  
Start at 2022-07-07 09:21:39.973288 +0000 UTC
Move successfully, obs://eihealth-6d95566b-f0c6-4615-b876-678686ec96e3/tmp/ --> obs://eihealth-6d95566b-f0c6-4615-b876-678686ec96e3/t1/, cost [332], status [200], request id [00000181DB8D6A334012AD144BC14321]
示例2:将tmp文件夹移动至t1文件夹下,命令中tmp文件夹结尾无需加“/”,t1文件夹结尾可以加或不加“/”。
health mv /tmp /t1  -r  -f --dryRun 或者 health mv /tmp /t1/  -r  -f --dryRun
# 返回结果如下  
Start at 2022-07-07 09:25:32.739281 +0000 UTC
Move successfully, obs://eihealth-6d95566b-f0c6-4615-b876-678686ec96e3/tmp --> obs://eihealth-6d95566b-f0c6-4615-b876-678686ec96e3/t1/tmp, cost [356], status [200], request id [00000181DB8D6A334012AD144AA17E01]

相关文档