2019-02-17-2-利用BaiduPCS-Go批量秒传与备份

2-利用BaiduPCS-Go批量秒传与备份

项目地址引用:

https://github.com/iikira/BaiduPCS-Go
基本思想:根据手动秒传的方法,只要知道file_size和文件md5值,再根据自己意愿添加一个文件名,就可以根据云端已有数据在自己云盘中”拷贝”一份副本。

项目背景和思想

作者到目前有几十个云盘账号,文件管理起来比较麻烦,连账号切换都得靠Cookie Profile Switcher插件实现。再说,一个松鼠党必须时时保持警惕,应对账号被封资源丢失的痛苦。
秒传的原理是:通过检测文件大小和md5值,或者再加上其他如文件前256KB切片的md5值的信息,若云端有相同的文件,则直接进行云端拷贝。
BaiduPCS-Go的作者在新版本中实现如下功能:只需要知道file_size和md5,就可以实现在本地硬盘没有该文件下,但是云端别人已经上传过该文件时,进行虚拟秒传。
BaiduPCS-Go及其秒传功能的用法就不赘述了,均在github上。
举例:BaiduPCS-Go ru -length=<文件的大小> -md5=<文件的md5值> <网盘路径/文件名>
基于此思想,根据BaiduYunCacheFileV0.db文件含有文件目录,文件名,大小,md5等信息的原理,我们可以利用SQLite工具提取信息,配合Excel和其公式,制作一个如下类型的批处理文件:

1
2
3
4
5
BaiduPCS-Go ru -length=<size_1> -md5=<md5_1> <文件1>
BaiduPCS-Go ru -length=<size_2> -md5=<md5_2> <文件2>
BaiduPCS-Go ru -length=<size_3> -md5=<md5_3> <文件3>
...
pause

项目着手

下载与登陆

首先,下载BaiduPCS-Go.exe,并放到合适的目录中。
输入login回车,按提示输入账号、密码、和验证登陆。

配置环境变量

步骤1.png
步骤2.png

提取BaiduYunCacheFileV0.db中信息

接下来有一个工具,为了展示该秒传法的实用性,我直接通过下面途径来”分享“出来。
在命令提示符中输入下面命令,即可保存一份SQLiteSpy.exe在你们云盘中,前提是你已经在BaiduPCS-Go中登陆过了。

1
BaiduPCS-Go ru -length=3746304 -md5=D3C44CE0F2EA0886091DFBDD3BB6CB45 /SQLiteSpy/SQLiteSpy.exe

然后下载

1
BaiduPCS-Go d SQLiteSpy

相同方法下载第二个更强大的工具

1
2
BaiduPCS-Go ru -length=101809138 -md5=09FC738A805C8EA4C27A86C553C1A048 /navicat/navicatpremiumpjb3264lsb.zip
BaiduPCS-Go d navicat

使用SQLiteSpy.exe配合everything找到并打开BaiduYunCacheFileV0.db,点击cache打开,随意点击某一格,ctrl+a然后ctrl+c,全选复制,新建文本文档,粘贴保存。
use1.png
use2.png

Excel中合成命令行指令并运行

打开excel,数据-导入文本文档,自动生成带有格式的表格。
可见A到J列为如下数据:
| A | B | C | D | E | F | G | H | I | J |
| ——| —— | —— | ——| —| —— | ——| —— | —— | ——|
| id | fid | parent_path | server_filename | file_size | md5 | isdir | category | server_mtime | local_mtime |
在一个空列中编辑公式:

1
="BaiduPCS-Go ru -length="&E1&" -md5="&F1&" """&C1&D1&""""

ctrl+d填充所有,复制需要的命令行到文本文档中保存为bat文件或者cmd文件。此处命名为”name.bat”
然后双击运行即可实现批量秒传文件。

问题解决

针对Unicode字符的解决方法

有时文件名有类似”†“的Unicode字符,即使保存为Unicode或者utf-8文档,在cmd中运行也是乱码,这时候就需要转码。
先将name.bat保存为utf-8编码的文档。
预先在cmd中输入chcp 65001可以无乱码运行utf-8文件。所以在name.bat同目录下建立另一个bat文件,输入:

1
2
3
chcp 65001
name.bat
pause

保存该bat为ANSI编码,双击运行即可调用name.bat。
如果需要保存输出到文本文档查看哪些秒传失败,代码如下:

1
2
3
chcp 65001
name.bat >>log.txt
pause

运行结束即可在log.txt中查看记录。

针对过大的数据库

如果BaiduYunCacheFileV0.db超过10MB,往往在SQLiteSpy中复制的文本不能完全粘贴在文本文档中,这时需要Navicat Premium 12

use3.png
use4.png
use5.png
如图打开BaiduYunCacheFileV0.db,导出文本文件或者excel文件,字符具体处理公式可能根据导出内容有差别,但是处理思路一样。

项目测试

亲测秒传一些游戏资源,结果如下:
对自己一个账号内一共2TB的资源进行信息提取,命令行秒传测试,成功秒传了1.3TB。嗯,算不错的说。因为度娘可能对某些虽然别人已经上传但是资源太新的文件没有计入秒传名单内。
此法不失为一种备份自己已有资源的好办法。另外,还希望大家好好利用此方法的同时遵纪守法O v O。

s