今天遇到一个需求,需要将七牛云其中一个空间的资源复制到一个新的空间下,官方控制台只有一个跨区域同步的功能,在同一个区域下不让使用。
官方提供的开发者工具中有一个qshell
工具能够满足需求 https://developer.qiniu.com/kodo/tools/qshell
这里做一个使用笔记,qshell
使用的是当前最新版本v2.4.0
,随着版本的更新使用方式或许会有不同请留意。
我这里使用的是Linux
系统操作,windows
上qshell
的使用命令是一样的,但是有一个文本截取的命名使用的是linux
的awk
命令,windows
下请自行查找使用相关命令。
- 下载工具:按照官方文档下载工具
- 配置账户:
qshell account [--overwrite | -w]<AccessKey> <SecretKey> <Name>
-w --overwrite
强制覆盖已经存在的账户,新增默认为空;
AccessKey
和 SecretKey
为你的秘钥;
Name
这个可以随便填写,取个名字方便你自己管理。
示例:qshell account A4***YS YD***tQ guitu18
添加完成后可以使用qshell user ls
查看你添加的账户。
- 列举文件:
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
- 截取文件名:
cat fileList.txt | awk '{print $1}' >fileList_CP.txt
从上面的控制台可以看到列出的文件信息比较多,我们copy文件仅需要文件名,所以我们需要截取文件名。
这里使用的是Linux
下的awk
命令,上面的命令执行后会截取文件名并输出到fileList_CP.txt
文件中。
awk
是Linux
上一个很强大的工具,被称为Linux
三剑客,上述命令中$1
是指第一列,也就是文件名这一列。详细的介绍请查看awk
相关文档。
- 批量复制:
qshell batchcopy guitu18 guitu18_new -i fileList_CP.txt
上面这条命令是将guitu18
空间下于fileList_CP.txt
中指定名称的文件复制到guitu18_new
空间。
执行后会有一个警告信息<DANGER> Input jcfjic to confirm operation:
,按照提示的随机字符串内容输入jcfjic
后回车即可。