BOS CLI 的安裝
BOS CLI是什么? 為了方便用戶使用百度的對象存儲,百度開放云提供了一款可以通過命令行工具調用bos服務的小工具,對于很多linux的愛好者來說,這個小工具堪稱使用bos的利器。
BOS CLI能做什么?它可以讓你在命令行環境下,完成bucket的創建和刪除,object的上傳,下載以及刪除拷貝的功能。下面我們來看一下如何安裝?
安裝可以參考官方的文檔:
http://bce.baidu.com/doc/BOS/BOSCLI.html#.E5.AE.89.E8.A3.85BCE.20CLI
具體安裝還是很簡單的,但前提是一定必須要先安裝bce python sdk,且bce python sdk的版本必須是0.8.4及以上。
在安裝bce-cli的時候,經常遇到的一個問題,如下圖所示:
這是由于在系統python的安裝包里沒有setuptools這個模塊。
如果是linux的系統,可以直接運行命令:apt-get install python-setuptools(ubuntu)或者 yum install python-setuptools。
如果是windows的系統,需要download 這個:https://bootstrap.pypa.io/get-pip.py,然后執行:python.exe get-pip.py。
安裝完成之后,運行bce(在windows下需要運行python bce),如果出現下面的提示,就表示安裝成功:
BOS CLI的使用
我覺得廣大用戶來說,如果你對linux命令很熟,CLI工具最方便的就是,能夠直接編寫shell來實現批量下載object到本地,到遠程;批量刪除object。
假設我們已經通過bce -c 設置好了AK,SK等等信息,這里就不說怎么設置了,具體可以參考官方文檔。
1. 批量刪除bucket下面的object
創建一個名稱叫testdelobj.sh的文件:
#!/bin/bash
#將bos的bucket作為第一個參數傳進來
bce bos ls -r "bos:/"$1 >results
#得到要刪除的object的個數
LEN=`awk '{print NR}' results |tail -n1`
echo "##There will be " $LEN " objects will delete from BOS server.##"
echo "You have 10 seconds to interrupt..."
sleep 10
for object in `awk '{print $4}' results`; do
bce bos rm -y bos:/$1/$object
done
然后將testdelobj.sh的權限改成可執行,chmod 777 testdelobj.sh
運行 ./testdelobj.sh xdtest,就可以批量刪除BOS上的文件了(xdtest是我BOS服務的一個bucket)。
不過有個問題,如果是通過控制臺創建的文件夾,再在文件夾里存有文件,我運行上面的腳本并不會完全刪除所有內容。會留有一個空的節點在控制臺上。這是為什么呢?
其實是這樣的:如果通過控制臺創建的文件夾A,會在bos服務器端存放一個字節為0的A/ ,但是通過命令行創建的以及通過sdk上傳的模擬的文件夾,在服務器端不會存放這個。
2. 批量將一個bucket的內容拷貝到另一個bucket下面
注:這個bucket可以是自己的,也可以是別人的,如果是要拷貝別人bucket里的內容,注意對方bucket得是公共的權限。
創建一個名為testcp.sh的文件,內容如下:
#!/bin/bash
bce bos ls -r "bos:/$1" >results
LEN=`awk '{print NR}' results |tail -n1`
echo $LEN
for object in `awk '{print $4}' results`; do
bce bos cp bos:/$1/$object bos:/$2/$object
done
3. 批量將一個bucket的內容拷貝到本地
有了前面兩個例子,這個腳本寫起來就沒有難度了,唯一的難點就是怎么在本地創建和bos bucket一致的目錄結構了。
#!/bin/bash
#Pass the first argument
bce bos ls -r "bos:/"$1 >results
#get object number
LEN=`awk '{print NR}' results |tail -n1`
echo "##There will be " $LEN " objects will delete from BOS server.##"
echo "You have 10 seconds to interrupt..."
sleep 10
for object in `awk '{print $4}' results`; do
bce bos rm -y bos:/$1/$object
done