七牛云存储qshell命令
下载qshell
$ wget https://kodo-toolbox-new.qiniu.com/qshell-v2.15.0-linux-386.tar.gz
$ tar -xvf qshell-v2.15.0-linux-386.tar.gz
$ mv qshell /usr/bin/
$ chmod +x /usr/bin/qshell
1. account
1.1 设置当前用户的 AccessKey, SecretKey, Name
qshell account ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6x LVzZY2SqOQ_I_kM1n00ygACVBArDvOWtiLkDtKiw name_test
1.2 输出当前用户设置的 AccessKey 和 SecretKey
qshell account
输出:
Name: name_test
AccessKey: ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6x
SecretKey: LVzZY2SqOQ_I_kM1n00ygACVBArDvOWtiLkDtKiw
1.3 我们可以在设置 name_test 账户后,继续添加一个账户。
qshell account ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6abc LVzZY2SqOQ_I_kM1n00ygACVBArDvOWtiLkDthaha name_test2
qshell 可以记录多个设置的账户信息,账户的管理、切换、删除等,可以参考 qshell user 自命令文档
2. user
添加账号
// --ak:七牛账号对应的 AccessKey [获取](https://portal.qiniu.com/user/key) 。【必选】
// --sk:七牛账号对应的 SecretKey [获取](https://portal.qiniu.com/user/key) 。【必选】
// --name:AccessKey 和 SecretKey 对的 id, 可以任意取,但同一台机器此 id 不可重复;和在七牛注册的邮箱信息没有关系, 只是 qshell 本地用来标示 <ak, sk> 对。【必选】
qshell user add --ak ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6x --sk LVzZY2SqOQ_I_kM1n00ygACVBArDvOWtiLkDtKiw --name name_test
清除本地数据库
qshell user clean // 注:仅仅清除本地数据库,会保留当前账户
切换当前的账户
qshell user cu // 切换至上一次使用的账户
qshell user cu test // 切换到 `test` 账号,`test` 为 ak,sk 对的 id
列举本地所有的账号信息
qshell user ls
输出某个账户信息
qshell user lookup test // `test` 为 ak,sk 对的 id
删除
test
账号
qshell user remove test // `test` 为 ak,sk 对的 id
3. listbucket
1 获取空间 if-pbl
里面的所有文件列表:
qshell listbucket if-pbl -o if-pbl.list.txt
2 获取空间 if-pbl
里面的以 2014/10/07/
为前缀的文件列表:
qshell listbucket if-pbl --prefix '2014/10/07/' -o if-pbl.prefix.list.txt
结果:
hello.jpg 1710619 FlUqUK7zqbqm3NPwzq2q7TMZ-Ijs 14209629320769140 image/jpeg 1
hello.mp4 8495868 lns2dAHvO0qYseZFgDn3UqZlMOi- 14207312835630132 video/mp4 0
hhh 1492031 FjiRl_U0AeSsVCHXscCGObKyMy8f 14200176147531840 image/jpeg 1
jemygraw.jpg 1900176 FtmHAbztWfPEqPMv4t4vMNRYMETK 14208960018750329 application/octet-stream 1 QiniuAndroid
4. mkbucket
在华北区域创建名为 my-bucket 的私有空间
$ qshell mkbucket my-bucket --region z1 --private
5. qupload2
qupload2
功能和 qupload
一致,不过 qupload2
通过命令行的方式来指定各个需要的参数,例如:
qshell qupload2 --src-dir=/home/jemy/temp --bucket=test
如果需要指定上传到 test空间的 one目录
qshell qupload2 --src-dir=/home/jemy/temp --bucket=test --key-prefix=one/
6. qdownload2
qdownload2
功能和 qdownload
一致,选项也是一一对应,不过 qdownload2
通过命令行的方式来指定各个需要的参数,例如:
qshell qdownload2 --dest-dir=/home/jemy/temp --bucket=test
7. fput
fput
命令用来以 multipart/form-data
的表单方式上传一个文件。适合于中小型文件的上传,一般建议如果文件大小超过 100MB 的话,都使用分片上传。
1 上传本地文件 /Users/jemy/Documents/qiniu.jpg
到空间 if-pbl
里面。
$ qshell fput if-pbl qiniu.jpg /Users/jemy/Documents/qiniu.jpg
2 上传本地文件 /Users/jemy/Documents/qiniu.jpg
到空间 if-pbl
里面,带前缀 2015/01/18/
,并且指定 MimeType
参数为 image/jpg
$ qshell fput if-pbl 2015/01/18/qiniu.jpg /Users/jemy/Documents/qiniu.jpg --mimetype image/jpg
3 覆盖上传 qiniu.mp4
到空间 if-pbl
$ qshell fput if-pbl 2015/01/18/qiniu.jpg /Users/jemy/Documents/qiniu.jpg --overwrite
5 使用低频存储
$ qshell fput if-pbl 2015/01/18/qiniu.jpg /Users/jemy/Documents/qiniu.jpg --file-type 1
8. rput
1 上传本地文件 /Users/jemy/Documents/qiniu.mp4
到空间 if-pbl
里面。
// 使用使用分片上传 API V1
$ qshell rput if-pbl qiniu.mp4 /Users/jemy/Documents/qiniu.mp4
// 使用使用分片上传 API V2
$ qshell rput if-pbl qiniu.mp4 /Users/jemy/Documents/qiniu.mp4 --resumable-api-v2
2 上传本地文件 /Users/jemy/Documents/qiniu.mp4
到空间 if-pbl
里面,带前缀 2015/01/18/
,并且指定 MimeType
参数为 video/mp4
。
$ qshell rput if-pbl 2015/01/18/qiniu.mp4 /Users/jemy/Documents/qiniu.mp4 --mimetype video/mp4
3 覆盖上传 qiniu.mp4
到空间 if-pbl
$ qshell rput if-pbl 2015/01/18/qiniu.jpg /Users/jemy/Documents/qiniu.jpg --overwrite
4 使用低频存储
$ qshell rput if-pbl 2015/01/18/qiniu.jpg /Users/jemy/Documents/qiniu.jpg --file-type 1
9. batchcopy
1 我们将空间 if-pbl
中的一些文件复制到 if-pri
空间中去。如果是希望原文件名和目标文件名相同的话,可以这样指定 SrcDestKeyMapFile
的内容:
data/2015/02/01/bg.png
data/2015/02/01/pig.jpg
将上述内容保存到名为 tocopy.txt
的文件中。然后使用如下命令就可以把上面的文件以和原来文件相同的文件名从 if-pbl
复制到 if-pri
了。
$ qshell batchcopy if-pbl if-pri -i tocopy.txt
2 如果上面希望在复制的时候,对一些文件进行重命名,那么 SrcDestKeyMapFile
内容可以是这样:
data/2015/02/01/bg.png background.png
data/2015/02/01/pig.jpg
从上面我们可以看到,你可以为你希望重命名的文件设置一个新的名字,不希望改变的就不用指定。然后使用命令就可以将文件复制过去了。
$ qshell batchcopy if-pbl if-pri -i tocopy.txt
3 如果不希望上面的复制过程出现验证码提示,可以使用 --force
选项:
$ qshell batchcopy --force if-pbl if-pri -i tocopy.txt
4 如果目标空间存在同名的文件,可以使用 --overwrite
选项来强制覆盖:
$ qshell batchcopy --force --overwrite if-pbl if-pri -i tocopy.txt
10. batchdelete
1 删除空间 if-pbl
下的某些文件,指定要删除的文件列表 todelete.txt
进行删除,其内容如下:
a.jpg
test/b.jpg
执行如下命令:
$ qshell batchdelete if-pbl -i todelete.txt
2 删除空间 if-pbl
中的所有文件:
// 先列举空间:if-pbl,列举结果保存在文件 if-pbl.list.txt 中
$ qshell listbucket if-pbl -o if-pbl.list.txt
// 再根据 if-pbl.list.txt 进行删除
$ qshell batchdelete --force if-pbl -i if-pbl.list.txt
3 如果希望导出成功和失败的文件列表
$ qshell batchdelete if-pbl -i if-pbl.list.txt --success-list success.txt --failure-list failure.txt
4 对于要删除的文件名字包含了空格的情况, 那么可以指定自定义的分隔符对文件每行进行分割, 假如使用 \t 进行分割
$ qshell batchdelete -F '\t' if-pbl -i todelete.txt
11. batchmove
1 我们将空间 if-pbl
中的一些文件移动到 if-pri
空间中去。如果是希望原文件名和目标文件名相同的话,可以这样指定 SrcDestKeyMapFile
的内容:
data/2015/02/01/bg.png
data/2015/02/01/pig.jpg
然后使用如下命令就可以以和原来相同的文件名从 if-pbl
移动到 if-pri
了。
$ qshell batchmove if-pbl if-pri -i tomove.txt
2 如果上面希望在移动的时候,对一些文件进行重命名,那么 SrcDestKeyMapFile
可以是这样:
data/2015/02/01/bg.png background.png
data/2015/02/01/pig.jpg
从上面我们可以看到,你可以为你希望重命名的文件设置一个新的名字,不希望改变的就不用指定。
$ qshell batchmove if-pbl if-pri -i tomove.txt
3 如果不希望上面的移动过程出现验证码提示,可以使用 --force
选项:
$ qshell batchmove --force if-pbl if-pri -i tomove.txt
4 如果目标空间存在同名的文件,可以使用 --overwrite
选项来强制覆盖:
$ qshell batchmove --force --overwrite if-pbl if-pri -i tomove.txt
12. batchrename
1 比如我们要将空间 if-pbl
里面的一些文件进行重命名,我们可以指定如下的 OldNewKeyMapFile
的内容:
2015/03/22/qiniu.png test/qiniu.png
2015/photo.jpg test/photo.jpg
上面,我们将 2015/03/22/qiniu.png
重命名为 test/qiniu.png
,诸如此类。 把这个内容保存到文件 torename.txt
中,然后使用如下的命令将所有的文件进行重命名。
$ qshell batchrename if-pbl -i torename.txt
2 如果不希望上面的重命名过程出现验证码提示,可以使用 --force
选项:
$ qshell batchrename --force if-pbl -i torename.txt
3 对于重新命名的过程中,希望导入成功失败的文件,可以这样导出
$ qshell batchrename if-pbl -i torename.txt --success-list success.txt --failure-list failure.txt
13. qdownload
qdownload
可以将七牛空间中的文件同步到本地磁盘中。支持只同步带特定前缀或者后缀的文件,也支持在本地备份路径不变的情况下进行增量同步。 需要额外指出的是,将文件同步到本地都是走的七牛存储源站的流量而不是 CDN
的流量,因为 CDN
通常情况下会认为大量的文件下载操作是非法访问从而进行限制。
需要同步空间 qdisk
中的所有以 movies/
开头(理解为前缀的概念,那么 movies/1.mp4
, movies/2.mp4
等以 movies/
为前缀的文件都会被下载保存),并以 .mp4
结尾的文件到本地路径 /Users/jemy/Temp7/backup
下面;把下面的配置内容写入配置文件 qdisk_down.conf
,该配置文件需要自行创建:
{
"dest_dir" : "/Users/jemy/Temp7/backup",
"bucket" : "qdisk",
"domain" : "if-pbl.qiniudn.com",
"prefix" : "movies/",
"suffixes" : ".mp4",
"check_hash" : false
}
运行命令(下载并发数表示可以同时下载 10 个文件):
qshell qdownload -c 10 qdisk_down.conf
key_file
文件格式: 每行一个 key, 且仅有 key 的内容,除 key 外不能有其他字符。
save_path_handler
说明
save_path_handler
函数中可使用的文件参数有:
Key: 文件的在七牛云存储的 Key 值
DestDir: 下载配置的保存路径
ToFile: 默认的下载路径
ServerFileSize: 文件的在七牛云存储的大小
ServerFileHash: 文件的在七牛云存储的 Etag
ServerFilePutTime: 文件的在七牛云存储的上传时间
save_path_handler
常见示例:
1. 在不配置 save_path_handler 时,文件保存路径的构造方式为:
$dest_dir + $文件分割符 + $Key
2. 配置 save_path_handler ,使在构造文件保存路径时,去除 Key 中一部分前缀 a/:
save_path_handler 配置:"{{pathJoin .DestDir (trimPrefix \"a/\" .Key)}}"
pathJoin:路径拼接函数
.DestDir:对应配置文件中的 dest_dir,假设配置为:"/user/lala/"
trimPrefix:截掉字符串头函数,trimPrefix \"a/\" .Key 表示:将文件 Key 的 "a/" 截掉
.Key:表示文件的 Key,假设为:"a/b/hello.png"
上面信息最终构造的文件路径为:"/user/lala/b/hello.png"
如果需要验证 save_path_handler 配置是否符合预期,可使用 func 命令。
参数部分:'{"Key": "a/b/hello.png", "DestDir": "/user/lala/"}',这部分信息在 download 时会自动生成并作为回调函数的参数,用户不用关心。
回调函数 save_path_handler : "{{pathJoin .DestDir (trimPrefix \"a/\" .Key)}}"
验证:
$qshell func '{"Key": "a/b/hello.png", "DestDir": "/user/lala/"}' "{{pathJoin .DestDir (trimPrefix \"a/\" .Key)}}"
输出:
[W] output is insert [], and you should be careful with spaces etc.
[I] [/user/lala/b/hello.png]
3. 自定义文件下载后的保存路径:$DestDir + $文件分割符 + ($Key 首部 a/ 替换成 newA/)
save_path_handler 配置: "{{pathJoin .DestDir \"newA\" (trimPrefix \"a/\" .Key)}}"
pathJoin:路径拼接函数
.DestDir:对应配置文件中的 dest_dir,假设配置为:"/user/lala/"
trimPrefix:截掉字符串头函数,trimPrefix \"a/\" .Key 表示:将文件 Key 的 "a/" 截掉
.Key:表示文件的 Key,假设为:"a/b/hello.png"
最终文件的保存路径为:
/user/lala/newA/b/hello.png
验证:
$qshell func '{"Key": "a/b/hello.png", "DestDir": "/user/lala/"}' "{{pathJoin .DestDir \"newA\" (trimPrefix \"a/\" .Key)}}"
[W] output is insert [], and you should be careful with spaces etc.
[I] [/user/lala/newA/b/hello.png]