# 七牛云同账号不同空间之间的资源复制

今天遇到一个需求,需要将七牛云其中一个空间的资源复制到一个新的空间下,官方控制台只有一个跨区域同步的功能,在同一个区域下不让使用。

官方提供的开发者工具中有一个qshell工具能够满足需求 https://developer.qiniu.com/kodo/tools/qshell

这里做一个使用笔记,qshell使用的是当前最新版本v2.4.0,随着版本的更新使用方式或许会有不同请留意。

我这里使用的是Linux系统操作,windowsqshell的使用命令是一样的,但是有一个文本截取的命名使用的是linuxawk命令,windows下请自行查找使用相关命令。

  1. 下载工具:按照官方文档下载工具

  2. 配置账户:qshell account [--overwrite | -w]<AccessKey> <SecretKey> <Name> -w --overwrite 强制覆盖已经存在的账户,新增默认为空; AccessKeySecretKey 为你的秘钥; Name 这个可以随便填写,取个名字方便你自己管理。 示例:qshell account A4***YS YD***tQ guitu18 添加完成后可以使用qshell user ls查看你添加的账户。

  3. 列举文件:qshell listbucket myBucket 执行该命令可以在控制台打印出myBucket空间下的所有文件信息,注意myBucket为你实际的空间名称。 打印的信息如下,包含文件名、文件大小、hash值、时间戳、类型等信息:

    bf3ef4815c788b51bbba0db3ccd5f960.jpg   9032    FqhKaG-M0uqsqgiEy7yL4EnCQhnq    15615487482514342       image/jpeg      0
    c00bd4ffa41f4a69f3db23698bf8b6db.jpg   20385   FiiSVcZhFNmmI1PY-rhTwNV58l59    15615485628789460       image/jpeg      0
    c07abbba9bade434b5013599b6f7ed99.jpg   17785   FjNwo-F9GwIZ6Cqie2PDV4tVAUKk    15615471642972548       image/jpeg      0
    c0a5a8738810d20d1e9547f98f299af6.jpg   7667    Fsh3SMpgaBg-jpCFQBdBdo0HHefk    15615475819493399       image/jpeg      0
    

    这里我们需要将信息输出到文本文件保存下来,在命令后添加参数-o fileName即可输出到指定的文件。 如果需要根据前缀匹配可以在命令后添加参数--prefix 'img/',表示列举前缀为img/的文件。 完整的命令:qshell listbucket guitu18 --prefix 'img/' -o fileList.txt

  4. 截取文件名:cat fileList.txt | awk '{print $1}' >fileList_CP.txt

    从上面的控制台可以看到列出的文件信息比较多,我们copy文件仅需要文件名,所以我们需要截取文件名。 这里使用的是Linux下的awk命令,上面的命令执行后会截取文件名并输出到fileList_CP.txt文件中。 awkLinux上一个很强大的工具,被称为Linux三剑客,上述命令中$1是指第一列,也就是文件名这一列。详细的介绍请查看awk相关文档。

  5. 批量复制:qshell batchcopy guitu18 guitu18_new -i fileList_CP.txt

    上面这条命令是将guitu18空间下于fileList_CP.txt中指定名称的文件复制到guitu18_new空间。 执行后会有一个警告信息<DANGER> Input jcfjic to confirm operation:,按照提示的随机字符串内容输入jcfjic后回车即可。