我使用☁️七牛云存储了一堆 pdf 文件,我想批量下载其中的一部分,打包成一个压缩包。 最好是不需要通过我的服务器中转,能在七牛云上直接完成。
qshell 还是 pfop mkzip
- 通过七牛云官方命令行工具 qshell 实现本地批量下载+自动压缩,全程无需服务器中转。类似在 linux 终端里使用 wget 或者 curl 命令一样
- 使用七牛云 mkzip 异步处理接口,直接在云端打包,生成压缩包后下载。但是官方的 mkzip 文档太简陋了,我没有找到怎么对文件改名的操作。而且,如果一个文件变更,整个压缩包都需要重新打包。这样成本太高。所以,我还是选择 qshell 来下载文件。
纠结了一下,发现还是 qshell 更适合我的需求。因为我需要下载的文件数量较多,而且需要对文件进行重命名的操作。 虽然,不能直接在云端打包,但是可以通过 qshell 下载到本地后,再进行打包操作。这样可以更灵活地处理文件名和目录结构, 以及后续的删除文件操作。
qshell 安装
因为公司的电脑安装了加密软件,下载到本地的 pdf 文件会被加密,导致无法直接打开。所以,我选择的 WSL 1 来下载 pdf 文件。所以,需要在 WSL 1 中安装 qshell。
下载地址:
https://developer.qiniu.com/kodo/1302/qshell
因为我 WSL 中安装的是 Ubuntu Server,所以下载 Linux amd64 的版本。
如果下载 Linux X86 版本,执行会报错:
cannot execute binary file: Exec format error
确认 qshell 安装完成:
$ qshell -v
qshell version v2.16.0
qshell 设置账号信息
account 命令用来设置当前用户的 AccessKey 和 SecretKey ,这对 Key 主要用在其他的需要授权的命令中,比如 stat , delete , listbucket2 命令中。 该命令设置的信息,经过加密保存在 HOME 目录下的 .qshell/account.json 文件中。
设置方法参考:
https://github.com/qiniu/qshell/blob/master/docs/account.md
qshell account [--overwrite | -w] <Your AccessKey> <Your SecretKey> <Your Account Name>
设置完成后,可以通过以下命令查看账号信息:
qshell account
qshell 下载指定文件
命令格式:
qshell get <Bucket> <Key> [-o <OutFile>]
参考:
https://github.com/qiniu/qshell/blob/master/docs/get.md
例如执行:
$ qshell get my_bucket_name dir1/dir2/hello.pdf
需要注意的是,如果不指定 o 参数,则本地的保存目录结构会和七牛云上的目录结构一致。
即,会在当前目录下创建 dir1/dir2 目录,并将 hello.pdf 保存到 dir2 目录下。
对于需要打包压缩的场景,我需要把所有目标文件都放到一个目录下,然后再打包压缩。 所以,还是指定 o 参数,将文件下载到当前目录下。
批量下载
我想通过 golang 遍历数据库中存储的 pdf 文件 key,生成 qshell 命令列表,然后执行这些命令。
特殊符号转义
文件名中可能包含特殊符号,例如括号、空格等,这些符号在命令行中可能会导致:
- 语法错误 (括号导致)
- 找不到文件 (空格导致)
syntax error near unexpected token `('
这本质上是 linux shell 的转义问题,可以使用单引号完全禁用所有特殊字符。 单引号内部内容会按字面意义解析,无转义、无变量替换。例如:
$ qshell get my_bucket_name 'dir1/dir2/hello work(1).pdf' -o 'hello world.pdf'
唯一的问题是,需要防止原始文件名中包含单引号。好在还没有遇到。
执行
将导出的 qshell 命令列表保存到一个脚本文件中,然后执行:
$ chmod +x download.sh
$ ./download.sh
统计文件数量
> ls | wc -l
1024
打包
zip -r my_archive.zip my_folder/
再次上传七牛云
为了方便客户下载,我将打包好的 zip 文件再次上传到七牛云。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式