七牛提供了命令行工具qshell,可以很方便的进行bucket之前的资源迁移。
场景
写博客用到了七牛存放图片文件,但是七牛测试域名生命周期只有30天,于是,每过一个月都要进行资源的迁移。
好在七牛提供了方便的迁移工具– qshell
使用
安装
命令行工具的安装,官方有详细的教程。
添加账户
安装成功后,在个人中心-密钥管理页面获取账户信息,然后使用命令qshell account添加到本机。1
qshell account [AccessKey] [SecretKey] [username]
AccessKey
、SecretKey
在上述页面获取,username
可以自定义,作为账号的标识。
获取迁移文件列表
qshell listbucket 可以获取指定bucket的文件列表。
打印文件列表到控制台1
2
3qshell listbucket [bucketname]
// eg:
qshell listbucket blog
将列表信息输出到指定文件
1 | qshell listbucket [bucketname] -o [file] |
批量复制
因为批量复制要求文件名文件中的文件格式如下:1
2data/2015/02/01/bg.png
data/2015/02/01/pig.jpg
即,一行一个文件名。而我们在上一步导出的文件列表是这个样子的:
1 | data/2015/02/01/bg.png 52086 FtTnPKmoUjJ3ts1qvXxyFyV2PfxM 15459680547900662 image/png 0 |
只需要每一行的第一列文本就够了。用awk获取list结果的第一列:
1 | cat list.txt | awk '{print $1}' >list_final.txt |
然后,使用qshell batchcopy命令进行批量复制。1
2
3qshell batchcopy [origin] [target] -i [file]
// eg:
qshell batchcopy blog blog2 -i list_final.txt
batchcopy
有几个参数很好用。
-f --force
。复制过程中会有验证码提示,使用这个参数可以跳过。-w --overwrite
。遇到同名文件,强制覆盖。-s --success [file]
。输出复制成功的文件列表到指定文件。-e --failure [file]
。输出复制失败的文件列表到指定文件。
最后,我们执行复制:
1 | qshell batchcopy -f -s success.txt -e fail.txt blog blog2 -i list_final.txt |
不同分区
目标 bucket 必须和原 bucket 在同一个区(华东/华南)。否则,使用batchcopy
命令会报错(400 incorrect zone
)。
这种情况下,只能先下载再上传了。
批量下载
七牛提供了qshell qdownload可以批量下载文件到本地。
批量上传
七牛提供了qshell qupload可以批量上传本地文件到指定bucket。
awk
TODO
总结
以上是穷逼做法,有钱直接买服务器,买域名备案即可永久使用。