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