七牛Bucket迁移 🌔

七牛提供了命令行工具qshell,可以很方便的进行bucket之前的资源迁移。

场景

写博客用到了七牛存放图片文件,但是七牛测试域名生命周期只有30天,于是,每过一个月都要进行资源的迁移。
好在七牛提供了方便的迁移工具– qshell

使用

安装

命令行工具的安装,官方有详细的教程

添加账户

安装成功后,在个人中心-密钥管理页面获取账户信息,然后使用命令qshell account添加到本机。

1
qshell account [AccessKey] [SecretKey] [username]

AccessKeySecretKey在上述页面获取,username可以自定义,作为账号的标识。

获取迁移文件列表

qshell listbucket 可以获取指定bucket的文件列表。

打印文件列表到控制台

1
2
3
qshell listbucket [bucketname]
// eg:
qshell listbucket blog

将列表信息输出到指定文件

1
2
3
qshell listbucket [bucketname] -o [file]
// eg:
qshell listbucket blog -o list.txt

批量复制

因为批量复制要求文件名文件中的文件格式如下:

1
2
data/2015/02/01/bg.png
data/2015/02/01/pig.jpg

即,一行一个文件名。而我们在上一步导出的文件列表是这个样子的:

1
2
data/2015/02/01/bg.png	52086	FtTnPKmoUjJ3ts1qvXxyFyV2PfxM	15459680547900662	image/png	0
data/2015/02/01/pig.jpg 89101 FlcHElGI3kGFxjKao2IAg7fIGvBj 15459680548557035 image/png 0

只需要每一行的第一列文本就够了。用awk获取list结果的第一列:

1
cat list.txt | awk '{print $1}' >list_final.txt

然后,使用qshell batchcopy命令进行批量复制。

1
2
3
qshell 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

总结

以上是穷逼做法,有钱直接买服务器,买域名备案即可永久使用。

参考

  1. awk 入门教程
  2. AWK 简明教程
  3. awk 处理文本
  4. awk 命令