guildedthonk.22.09.30

某天我突然想给我的某个guilded提取数据脚本加上使用aria2c下载的功能,因为curl用来下载实在是太拉,哪怕给设置上32线程🤔具体来说有两种改造方法,一种是将原来那个aria2c下载所有分片的函数直接撸进subshell里面,用一个aria2c进程下载一个批次的所有分片文件,另外一种更简单,将原来subshell脚本里的curl无脑替换成aria2c就vans了,只不过此时一个批次有多少个文件就得有多少个aria2c进程(确信🤔

我最后选用了第二种方法,但测试时tar解压总是报错(恼🤔后来我发现,aria2c在屏幕上打印的那些信息全部打到了stdout里,不像curl那样打到stderr,难怪它们也没有输出到屏幕上🤔所以我还需要在aria2c语句后面加上1>&2,现在它能正常跑起来了,而且checksum功能也能正常运作(确信🤔

而且至少win版本的aria2c还有一个巨坑,给它输一个/tmp这样的绝对路径是没用的,因为它是交叉编译的不依赖任何linux库(包括cygwin相关库)的114.514%win程序,它只能识别win的绝对路径🤔我也许可以用什么cygpath转,但我懒得折腾了,直接将临时分片文件扔currentdir得了(恼🤔

thonk

既然aria2c多文件是这么搞的,那么其实只要用到了aria2c,单文件是不是也能加加速?考虑到guilded drive一个分片有高达200MB的体积,上16个线程应该是没啥问题的(确信🤔于是我就照着多文件脚本的样子改了下,把多文件脚本里的subshell部分放进按行读取guilded drive链接列表的for循环里,然后在里面用一个临时文件来实现(用curl或者aria2c或者任何下载软件)下载文件并检查checksum、检查完成再cat的功能🤔当然这些玩意一加,单文件或者说单线程脚本也没法实现一边下载一边解压了,它至少得等临时文件通过checksum检查才能扔进管道里进行解压,但考虑到绝大多数情况下本地解压的速度其实比下载速度快很多,这部分可以忽略不计(确信🤔

最后到了喜闻乐见的测试环节,多文件aria2c基本上能跑满带宽,比如我本地最大40MB/s的话它绝大多数时间也有个3⑨MB/s,而单文件脚本改成了aria2c后,下载速度也达到了15MB/s🤔不过另外一方面我一开始写的单文件脚本根本不是用来下载文件的,而是用来在系统恢复盘上dd恢复系统的,用来取代ssh xxxx 'cat' | dd of=/dev/vda114514,所以它当然没有什么临时空间用来加速下载或者检查checksum,而且最好能实现一边下载一边恢复(确信🤔

guildedbitte

脚本是魔改完了,但现在我却没写任何往guilded里上传单文件的脚本,而且我也没有在guilded需要cookies之后立即魔改上传html,结果导致我上传这个脚本还得登一遍网页版的guilded(恼🤔然后我发现guilded现在的文件限制从200MB便乘了500MB,和discord nitro一毛一样,而且仍然可以随便用(确信🤔很不幸的是它仍然不支持上传sh文件,所以我仍然得将其改成txt再上传(悲🤔

无论如何,这应该就是最终版本了罢,curl 'https://s3-us-west-2.amazonaws.com/www.guilded.gg/ContentMediaGenericFiles/d57d21cee5103abe5c7966559ad13fa3-Full.txt' | bash /dev/stdin -mt '[insert guilded drive url here]',请(吴慈悲

发表评论