七牛資料從一個桶轉移到另一個桶

weixin_34402408發表於2018-12-26

因為七牛臨時域名的原因,一些老的資料連線都對不上,我們這邊需要將一個 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。

參考

相關文章