最近在做项目的时候,需要将七牛正式环境空间的资源复制一份到测试环境,自己也从网上找了很多方法。
一、官方文档方法
1、批量复制文件
$accessKey = getenv('QINIU_ACCESS_KEY');
$secretKey = getenv('QINIU_SECRET_KEY');
$bucket = getenv('QINIU_TEST_BUCKET');
$auth = new Auth($accessKey, $secretKey);
$config = new \Qiniu\Config();
$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
//每次最多不能超过1000个
$keys = array(
'qiniu.mp4',
'qiniu.png',
'qiniu.jpg'
);
$keyPairs = array();
foreach ($keys as $key) {
$keyPairs[$key] = $key . "_copy";
}
$srcBucket = $bucket;
$destBucket = $bucket;
$ops = $bucketManager->buildBatchCopy($srcBucket, $keyPairs, $destBucket, true);
list($ret, $err) = $bucketManager->batch($ops);
if ($err) {
print_r($err);
} else {
print_r($ret);
}
2、批量移动或重命名文件
$accessKey = getenv('QINIU_ACCESS_KEY');
$secretKey = getenv('QINIU_SECRET_KEY');
$bucket = getenv('QINIU_TEST_BUCKET');
$auth = new Auth($accessKey, $secretKey);
$config = new \Qiniu\Config();
$bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
//每次最多不能超过1000个
$keys = array(
'qiniu.mp4',
'qiniu.png',
'qiniu.jpg'
);
$keyPairs = array();
foreach ($keys as $key) {
$keyPairs[$key . "_copy"] = $key . "_move";
}
$srcBucket = $bucket;
$destBucket = $bucket;
$ops = $bucketManager->buildBatchMove($srcBucket, $keyPairs, $destBucket, true);
list($ret, $err) = $bucketManager->batch($ops);
if ($err) {
print_r($err);
} else {
print_r($ret);
}
这两种方法都可以实现七牛空间文件的复制移动,但是有么有更简单的办法呢?这里为大家提供一个更快捷方便的方法。
qshell工具(七牛同步工具)
1、下载七牛的同步工具并解压
qshell(http://developer.qiniu.com/docs/v6/tools/qshell.html)
2、环境变量设置(Linux和Mac平台)
由于我解压到/jokki/tools
下面,那么我们可以把如下的命令写入到你所使用的bash所对应的配置文件中,如果是/bin/bash
,那么就是~/.bashrc
文件,如果是/bin/zsh
,那么就是~/.zshrc
文件中。
export PATH=$PATH:/jokki/tools
随后执行·source ~/.zshrc
或者source ~/.bashrc
来使配置立即生效.
2、运行cmd登录到七牛账号
qshell account 你的七牛AK 你的七牛SK 你的账号
这里可以测试是否登录成功
qshell user ls
如果出现如下界面则登录成功
3、下载你要复制的空间资源
qshell listbucket 你的空间名 -o 生成的文件名.txt
image.png
4、完成上步之后,会在当前目录下生成一个文件,如果当前目录没有,可以进行全局查找该文件
image.png
5、而我们只需要得到最前面的文件key就可以了,可以使用一条awk字符处理命令就可以了
cat cp.txt | awk '{print $1}' >cpp.txt
这时候我们就会发现,当前目录生成了一个如下只包含文件的key的txt文件cpp.txt
image.png
6、使用batchcopy命令将文件同步到需要复制的空间里面
qshell batchcopy 原本的空间名 要复制的空间名 -i 下载下来的txt文件名
实际过程中可能会让确认操作,输入对应验证码即可
~/tools » qshell batchcopy old-space new-space -i cpp.txt
<DANGER> Input gcafcc to confirm operation: gcafcc
All Copyed!
至此文件就成功从old-space空间文件复制到new-space空间了,当然复制过程中也可以实现对文件的命名操作,具体可以参考
https://github.com/qiniu/qshell/wiki/batchcopy
网友评论