美文网首页七牛
七牛将资源从一个空间复制到另一个空间

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

作者: 上善丨若水 | 来源:发表于2020-10-30 10:39 被阅读0次

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

    一、官方文档方法

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

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

    相关文章

      网友评论

        本文标题:七牛将资源从一个空间复制到另一个空间

        本文链接:https://www.haomeiwen.com/subject/nxwrvktx.html