githubantics.22.03.13

我实在是无聊的批爆,才会去写一个用github actions下bt种子的玩意🤔

但至少在此过程中,我得以发现aria2c有一个叫做--on-bt-download-complete/--on-download-complete的参数,可以用来将某些命令(比如上传discord drive)和aria2c下载无缝衔接(确信🤔当然在aria2c下载完后接着运行discord drive也算无缝衔接(迫真),但用这个参数可以让aria2c给接下来的命令传递点参数,比如它至少会传递三个参数:

aria2 passes 3 arguments to specified command when it is executed. These arguments are: GID, the number of files and file path. For HTTP, FTP, and SFTP downloads, usually the number of files is 1. BitTorrent download can contain multiple files. If number of files is more than one, file path is first one. In other words, this is the value of path key of first struct whose selected key is true in the response of aria2.getFiles() RPC method. If you want to get all file paths, consider to use JSON-RPC/XML-RPC. Please note that file path may change during download in HTTP because of redirection or Content-Disposition header.

这样的话,接下来的脚本只需要用$3就能读出下载后的文件夹或者文件名字,然后rar和disccord drive脚本就能极其精确地找到需要上传的文件,并上传它们(确信🤔当然,前提是将那两个玩意整合到一个sh文件里,并给那个sh文件赋予可执行权限,然后才能在--on-bt-download-complete/--on-download-complete后面调用🤔

这两个参数其实也是有点区别的,比如bt下载里,由于我使用了--follow-torrent=mem参数,它在下载完种子文件或者下载完磁力链接对应的种子文件后,会立即处理这个种子文件,而且它不在硬盘里暂存种子文件🤔此时--on-download-complete会在种子文件下载完就调用我们的脚本,很明显这不是我们期望的(确信🤔而--on-bt-download-complete会在种子对应的资源下完后才开始调用,这才是我们期望的🤔

barbruh

果然,就像上面那段文字所说的,如果下载下来的是个文件夹,它只能返回第一个文件(悲🤔看来,我恐怕得用老办法,处理所有文件了🤔

除此之外,我可能需要搞一个新的discord drive玩意,它能够将一个文件夹里的东西一个一个一个一个上传上去,而非只能先rar打包了处理🤔我记得旧discord drive的确有处理多文件的能力(别忘了它的前身是递归上传音乐脚本),但它处理大文件的方式是打包成rar🤔所以恐怕我得重新写一个(悲🤔

我现在暂时的想法是,基本不更改单文件discord drive脚本,但在它的基础上添加点东西,比如它除了将链接post到我的webhook上面之外,还将这个链接和那个文件的绝对路径或者相对路径记录下来🤔在最后,这个充满文件记录的metadata也被上传上去🤔而我这边可以再写一个脚本来处理这个metadata,方法无非就是将里面的discord drive脚本一个一个一个一个下载下来然后分别执行,执行的结果就是对应的单文件下载完成,然后将文件挪到正确的位置(确信🤔

wiebitte

新版脚本运行效果还行嘛,至少所有文件的确是上传了上去,只是它连.git目录的一堆文件都上传了,实在是让壬哭笑不得🤔看来,我可能需要在find命令里面写一堆排除列表,将比如.git还有其他一些乱七八糟的玩意排除掉🤔

那么接下来就是想办法处理它生成的带所有文件路径及其discord drive链接的玩意了🤔

不过这个discord drive脚本还有一个问题没得解决:某些种子里的文件名不是那种对discord非常友好的玩意,它里面包括空格甚至中文,那么它上传上去后,分卷文件的名称和它在checksums里面的名称对应不上,这将导致到时候下载完了检查checksums时也会报错,导致文件完全没法确认下载完成🤔所以我估计这个问题得这么解决,文件名需要保存到生成的脚本里面,然后上传discord drive的分片文件需要重新命名(确信🤔

thonkeqing

今天到了个聚合物锂电池组,将它和dac组合在了一起,称重376.58g,加上四通dc线也只有397.87g,貌似比以前也没少多少🤔但现在至少体积降低了不少,完全可以随便塞兜里了(确信🤔它的dc线长度也没有那么不堪,至少插dac上面是远远足够的(确信🤔

bruhfei

在折腾了114514个申必时间单位后,那个discord drive脚本终于被我折腾妥当了,它现在能用文件的sha512值来作为往discord drive上传分片的文件名🤔而且在这个过程中我还修复了另外一个我以前可能没有意识到的问题,以前我使用这个脚本的时候文件的相对路径就是文件名本身,因为当前目录就在文件所在的目录里🤔但在github actions搞bt重新上传的时候,相对路径不见得是文件名本身,并被写入了checksum文件🤔而重新下载这个文件的脚本如果要正常完成checksum检查,sha512值后面跟的东西必须得是文件名本身,不能是相对路径🤔所以我可能需要重新构造checksum项,其实也没啥难度,sha512值加两个空格后面跟文件名就vans了(确信🤔

除此之外我还优化了一顿discord drive解压函数,它现在能在rar解压的信息里面提取出解压后的脚本名字,这样的话discord链接里的文件名和实际文件名差多大都没问题(确信🤔而且它还能通过bash脚本的返回值来决定是否重试,比如我之前的bash脚本里就有如果下载未完全导致checksum对不上就删除错误的文件这一选项,但现在除此之外我还要它返回114514,这样解压函数就能自动开展重试了🤔

有这些基础,我觉得从几十个discord drive脚本里恢复bt文件的结构,应该也不是什么难事,现在由于我不用重新打包rar了,我可以用github actions处理最多50GB的种子(确信🤔先拿sex syndrome的那些有几百个图片和几个视频的种子试试🤔

bruhgumin(大嘘

终于,megumin的cosplay porn便乘了我这套github actions脚本至今第一个成功保存所有文件的种子(确信🤔然后我得到了一个列表文件,第一项是它的相对路径,第二项是单个文件的discord drive链接🤔

接下来我需要考虑下如何在下载这所有文件的情况下还要恢复它原来的目录结构🤔已知用find列举所有文件容易,但创建出合适的目录我就不清楚怎么搞了🤔

要么这么办吧,搜集所有目录信息算出路径深度(其实也就是里面有多少个斜杠🤔将路径深度和去除文件名后的路径保存成一个新的文件,然后对着这个新文件sort|uniq一顿,然后对每一行里面的路径通通mkdir🤔这用数据结构的说法,叫不叫广度优先(大嘘)遍历呢?🤔不对,明明是层次遍历🤔

顺便来一个刁难人的小问题:当文件夹层数达到或者超过10时,10|xxx会夹在1|xxx2|xxx之间,还是会在9|xxx后面?🤔这基本上相当于符号|和1290这些数字之间的关系🤔

发表评论