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

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

下载并 qshell

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

设置 account

$ qshell account AK SK name

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

列出 bucket

$ qshell listbucket bucketA -o srccopy.txt

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

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

处理文件列表

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

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

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

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

总结

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

参考

  • qshell
  • lua切割字符串
  • lua读写文件

你可能感兴趣的:(七牛数据从一个桶转移到另一个桶)