七牛将资源从一个空间复制到另一个空间

最近在做项目的时候,需要将七牛正式环境空间的资源复制一份到测试环境,自己也从网上找了很多方法。

一、官方文档方法

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
如果出现如下界面则登录成功

image.png

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                                                                            
 Input gcafcc to confirm operation: gcafcc
All Copyed!

至此文件就成功从old-space空间文件复制到new-space空间了,当然复制过程中也可以实现对文件的命名操作,具体可以参考
https://github.com/qiniu/qshell/wiki/batchcopy

你可能感兴趣的:(七牛将资源从一个空间复制到另一个空间)