本文最后更新于:2024年5月7日 下午
本文介绍使用 qshell 同步本地文件目录到存储空间并体现出层级结构的方法。
准备工作
环境
要上传的资源目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ tree . ├── 1 │ ├── a.jpg │ ├── b.jpg │ └── c.jpg ├── 2 │ ├── d.jpg │ ├── e.jpg │ └── f.jpg ├── g.jpg ├── h.jpg ├── i.jpg └── j.jpg
|
工具下载
命令行工具 qshell 传送门
- 各种操作系统需要下载的版本文档说得很清楚,我的ubuntu18.04 x64下载了qshell-linux-x64-v2.4.1.zip
- 解压得到 qshell-linux-x64-v2.4.1
- 重命名为 qshell,并赋予可执行权限
1 2
| mv qshell-linux-x64 qshell chmod +x qshell
|
配置环境变量
将qshell文件所在位置加入到 ~/.bashrc
1
| export PATH="/path of qshell:$PATH"
|
加载.bashrc使路径立即生效
测试,输入qshell -v 出现版本信息表明配置成功
1 2 3
| qshell -v
#qshell version v2.4.1
|
配置账户
需要鉴权的命令都需要依赖七牛账号下的 AccessKey 和 SecretKey ,位于个人中心 -> 秘钥管理
配置账户:
1
| qshell account [<AccessKey> <SecretKey> <Name>]
|
之后再次输入 qshell account 命令验证设置是否成功
1 2 3 4 5
| qshell account
#Name: zywvvd #AccessKey: Bd0UYk1e9pFWK××××××××××××××× #SecretKey: ZFsdguzYE3QUl×××××××××××××××
|
此处操作后在当前用户主目录中生成 qshell 目录:
1 2
| $ ls ~/.qshell/ # account.json
|
编写同步目录文件
在上文提到的~/.qshell 目录中创建配置文件,文件内容如下:
1 2 3 4 5
| $ cat upload.conf { "src_dir" : "/home/vvd/VVD_Work/test", "bucket" : "vvd-space" }
|
-
src_dir 为刚刚我存放照片的路径
-
bucket 为你的七牛云空间名称
同步文件
在~/.qshell文件夹下执行命令:
1
| qshell qupload upload.conf
|
返回上传日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Writing upload log to file /home/vvd/.qshell/qupload/040adc5d316ff8cfc274b2e099628234/040adc5d316ff8cfc274b2e099628234.log
Uploading /home/vvd/VVD_Work/test/1/a.jpg => 1/a.jpg [1/10, 10.0%] ... Uploading /home/vvd/VVD_Work/test/1/b.jpg => 1/b.jpg [2/10, 20.0%] ... Uploading /home/vvd/VVD_Work/test/1/c.jpg => 1/c.jpg [3/10, 30.0%] ... Uploading /home/vvd/VVD_Work/test/2/d.jpg => 2/d.jpg [4/10, 40.0%] ... Uploading /home/vvd/VVD_Work/test/2/e.jpg => 2/e.jpg [5/10, 50.0%] ... Uploading /home/vvd/VVD_Work/test/2/f.jpg => 2/f.jpg [6/10, 60.0%] ... Uploading /home/vvd/VVD_Work/test/g.jpg => g.jpg [7/10, 70.0%] ... Uploading /home/vvd/VVD_Work/test/h.jpg => h.jpg [8/10, 80.0%] ... Uploading /home/vvd/VVD_Work/test/i.jpg => i.jpg [9/10, 90.0%] ... Uploading /home/vvd/VVD_Work/test/j.jpg => j.jpg [10/10, 100.0%] ...
See upload log at path /home/vvd/.qshell/qupload/040adc5d
|
查看同步日志
日志存放在 ~/.qshell 文件夹下qupload文件夹内:
进入七牛云控制台查看上传的文件
在控制台-> 空间管理 -> 文件管理 可以看到同步的文件
图片文件目录更新
当我们更新了原始图片目录时(新建文件夹new,图片new.jpg):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| tree . ├── 1 │ ├── a.jpg │ ├── b.jpg │ └── c.jpg ├── 2 │ ├── d.jpg │ ├── e.jpg │ └── f.jpg ├── g.jpg ├── h.jpg ├── i.jpg ├── j.jpg └── new └── new.jpg
|
方法一
回到~/.qshell 上传文件:
1 2 3 4 5 6 7 8 9 10 11 12 13
| qshell qupload upload.conf Writing upload log to file /home/vvd/.qshell/qupload/c50b44d8de5ae468d8080f1f37fb946c/c50b44d8de5ae468d8080f1f37fb946c.log
Uploading /home/vvd/VVD_Work/test/1/a.jpg => 1/a.jpg [1/8, 12.5%] ... Uploading /home/vvd/VVD_Work/test/1/b.jpg => 1/b.jpg [2/8, 25.0%] ... Uploading /home/vvd/VVD_Work/test/1/c.jpg => 1/c.jpg [3/8, 37.5%] ... Uploading /home/vvd/VVD_Work/test/2/d.jpg => 2/d.jpg [4/8, 50.0%] ... Uploading /home/vvd/VVD_Work/test/2/e.jpg => 2/e.jpg [5/8, 62.5%] ... Uploading /home/vvd/VVD_Work/test/2/f.jpg => 2/f.jpg [6/8, 75.0%] ... Uploading /home/vvd/VVD_Work/test/g.jpg => g.jpg [7/8, 87.5%] ... Uploading /home/vvd/VVD_Work/test/h.jpg => h.jpg [8/8, 100.0%] ...
See upload log at path /home/vvd/.qshell/qupload/c50b44d8de5ae468d8080f1f37fb946c/c50b44d8de5ae468d8080f1f37fb946c.log
|
发现并没有更新,不知道是不是有别的函数来完成这个功能。
于是写了简单脚本upload.sh可以实现实时同步:
1 2 3 4
| #!/bin/bash
rm -rf ~/.qshell/qupload qshell qupload ~/.qshell/upload.conf
|
使用时只需sh upload.sh即可,正好不用每次都找那个 upload.conf 了
方法二
咳咳,人家七牛云有这个设定的,不用自己费劲删人家日志。
在upload.conf中加入配置:
-
rescan_local:支持本地增量上传
-
overwrite :支持本地文件覆盖上传
1 2 3 4 5 6
| { "src_dir" : "/home/vvd/VVD_Work/test", "bucket" : "vvd-space", "rescan_local" : true, "overwrite" : true }
|
再上传就好:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| qshell qupload upload.conf Writing upload log to file /home/vvd/.qshell/qupload/c50b44d8de5ae468d8080f1f37fb946c/c50b44d8de5ae468d8080f1f37fb946c.log
Uploading /home/vvd/VVD_Work/test/1/a.jpg => 1/a.jpg [1/12, 8.3%] ... Uploading /home/vvd/VVD_Work/test/1/b.jpg => 1/b.jpg [2/12, 16.7%] ... Uploading /home/vvd/VVD_Work/test/1/c.jpg => 1/c.jpg [3/12, 25.0%] ... Uploading /home/vvd/VVD_Work/test/2/d.jpg => 2/d.jpg [4/12, 33.3%] ... Uploading /home/vvd/VVD_Work/test/2/e.jpg => 2/e.jpg [5/12, 41.7%] ... Uploading /home/vvd/VVD_Work/test/2/f.jpg => 2/f.jpg [6/12, 50.0%] ... Uploading /home/vvd/VVD_Work/test/3/g.jpg => 3/g.jpg [7/12, 58.3%] ... Uploading /home/vvd/VVD_Work/test/g.jpg => g.jpg [8/12, 66.7%] ... Uploading /home/vvd/VVD_Work/test/h.jpg => h.jpg [9/12, 75.0%] ... Uploading /home/vvd/VVD_Work/test/i.jpg => i.jpg [10/12, 83.3%] ... Uploading /home/vvd/VVD_Work/test/j.jpg => j.jpg [11/12, 91.7%] ... Uploading /home/vvd/VVD_Work/test/new/new.jpg => new/new.jpg [12/12, 100.0%] ...
See upload log at path /home/vvd/.qshell/qupload/c50b44d8de5ae468d8080f1f37fb946c/c50b44d8de5ae468d8080f1f37fb946c.log
|
qshell qupload 配置
qupload
功能需要配置文件的支持,配置文件支持的全部参数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| { "src_dir" : "<LocalPath>", "bucket" : "<Bucket>", "file_list" : "<FileList>", "key_prefix" : "<Key Prefix>", "up_host" : "<Upload Host>", "ignore_dir" : false, "overwrite" : false, "check_exists" : false, "check_hash" : false, "check_size" : false, "rescan_local" : true, "skip_file_prefixes" : "test,demo,", "skip_path_prefixes" : "hello/,temp/", "skip_fixed_strings" : ".svn,.git", "skip_suffixes" : ".DS_Store,.exe", "log_file" : "upload.log", "log_level" : "info", "log_rotate" : 1, "log_stdout" : false, "file_type" : 0 }
|
参数名 |
描述 |
可选参数 |
src_dir |
本地同步路径,为全路径格式,工具将同步该目录下面所有的文件;不支持本地路径下的目录软连接。在Windows系统下面使用的时候,注意src_dir 的设置遵循D:\\jemy\\backup 这种方式。也就是路径里面的\ 要有两个(\\ ) |
N |
bucket |
同步数据的目标空间名称,可以为公开空间或私有空间 |
N |
file_list |
待同步文件列表,该文件列表内容必须是相对于src_dir 的文件相对路径列表,可以不指定,工具将自动获取src_dir 下面的文件列表。请使用 dircache 命令生成这个文件列表,生成之后可以手动删除不需要的行 |
Y |
up_host |
上传域名,可选设置,一般情况下不需要指定 |
Y |
ignore_dir |
保存文件在七牛空间时,使用的文件名是否忽略本地路径,默认为false |
Y |
key_prefix |
在保存文件在七牛空间时,使用的文件名的前缀,默认为空字符串 |
Y |
overwrite |
是否覆盖空间中已有的同名文件,默认不覆盖。 |
Y |
check_exists |
每个文件上传之前是否检查空间中是否存在同名文件,默认为false,不检查 |
Y |
check_hash |
在check_exists 设置为true 的情况下生效,是否检查本地文件hash和空间文件hash一致,默认不检查,节约同步时间 |
Y |
check_size |
在check_exists 设置为true 的情况下,如果check_hash 为false ,那么你可以设置check_size 为true 做简单的大小检查,以查看本地文件和空间文件大小是否一致,默认不检查 |
Y |
skip_file_prefixes |
跳过所有文件名(不带相对路径)以该前缀列表里面字符串为前缀的文件 |
Y |
skip_path_prefixes |
跳过所有文件路径(相对路径)以该前缀列表里面字符串为前缀的文件 |
Y |
skip_fixed_strings |
跳过所有文件路径(相对路径)中包含该字符串列表中字符串的文件 |
Y |
skip_suffixes |
跳过所有以该后缀列表里面字符串为后缀的文件或者目录 |
Y |
rescan_local |
默认情况下,本地新增的文件不会被同步,需要手动设置为true才会去检测新增文件。 |
Y |
log_level |
上传日志输出级别,可选值为debug ,info ,warn ,error ,默认info |
Y |
log_file |
上传日志的输出文件,如果不指定会输出到qshell工作目录下默认的文件中,文件名可以在终端输出看到 |
Y |
log_rotate |
上传日志文件的切换周期,单位为天,默认为1天即切换到新的上传日志文件 |
Y |
log_stdout |
上传日志是否同时输出一份到标准终端,默认为false,主要在调试上传功能时可以指定为true |
Y |
file_type |
文件存储类型,默认为0 (标准存储) 1 为低频存储 |
Y |
delete_on_success |
上传成功的文件,同时删除本地文件,以达到节约磁盘的目的,比如日志归档的场景,默认为false ,如果需要开启功能,设置为true 即可。 |
Y |
配置文件示例
我的配置文件使用了常用的实用配置,供大家参考:
1 2 3 4 5 6 7 8 9 10
| { "src_dir" : "/Hexo/Album_Temp", ### 上传文件夹路径(必选) "bucket" : "vvd-space", ### 七牛云空间名称(必选) "rescan_local" : true, ### 支持增量上传(重要) "key_prefix": "vvd_hexo/", ### 上传图像的前缀 "check_exists": true, ### 上传前是否检查文件是否存在 "check_size":true, ### 如果存在同名文件检查大小是否相同(比哈希快一些) "skip_suffixes": ".json,.log,.conf", ### 后缀列表,在上传文件夹路径中文件有这些后缀的就忽略不上传 "overwrite" : true ### 可否覆盖原文件 }
|
上传后的一张图片链接:
https://uipv4.zywvvd.com:33030/HexoFiles/vvd_hexo/2015_11_28_hefei_ustc_fengjing/1.jpg
文章链接:
https://www.zywvvd.com/notes/hexo/theme/next/22-qiniuyun-qshell/qiniuyun-qshell/