七牛数据从一个桶转移到另一个桶

因为七牛临时域名的原因,一些老的数据连接都对不上,我们这边需要将一个 bucketA 到另外一个 bucketB 中。操作步骤如下

下载并 qshell

七牛官方下载页面下载可执行文件,因为我是 mac ,所以选择 qshell_darwin_x64,找个合适的路径,我的习惯是 $HOME/bin,配置好 PATH。

设置 account

1
$ qshell account AK SK name

新版本有个 name,老版本是没有的。有找个参数可以更好的作区分。

列出 bucket

1
2
3
$ qshell listbucket bucketA -o srccopy.txt

xx简历.png 500071 FuEnT1v7oou7--ahA5gO1VIy4EHY 15283671101562504 image/png 0

将 bucket 中的所有文件信息导出,BUT,这里我对七牛这点不满意,应该有个参数可以配置可以输出哪些文件信息,一股脑所有信息都抛出来了,但是这里是用 \t 分割的,那么我们做个切分也就 ok 了。

处理文件列表

来喽!这里突发奇想,来个 lua 脚本。就是爱折腾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 function split( str,reps )
local resultStrList = {}
string.gsub(str,'[^'..reps..']+',function ( w )
table.insert(resultStrList,w)
end)
return resultStrList
end

sourceFile = io.open ("srccopy.txt","r");
toFile = io.open("tocopy.txt" ,"w");
y=1
for line in sourceFile:lines() do
arr=split(line,"\t")
name=arr[1]
toFile:write(name.."\n")
y=y+1
end
sourceFile:close()
toFile:close()

copy bucket

1
$ qshell batchcopy --force  --failure-list failure-list.txt bucketA bucketB -i tocopy.txt

处理失败的我们可以记录下来,大部分是文件名已存在,我这里选择不覆盖,如果需要覆盖添加上 --overwrite 参数。

总结

这是第一次对 lua 的使用,感觉还挺轻量,以后还可以多使用 lua。

参考

坚持原创技术分享,您的支持将鼓励我继续创作!