我想得到正在下载的文件的大小。由于文件是预先分配的,所以使用du -sd只返回其最终的完整大小。我想知道已经下载了多少,所以我不希望那些尾随的零字节数。这个尺码是怎么弄到的?
这应该是可能的,因为aria2c可以轻松地恢复其已停止的下载,而且它似乎没有将下载的长度存储在它的控制(会话)文件中。我编写了一个脚本来从.aria2控制文件中读取total_length。这是总长度,而不是下载的长度。您可以很容易地使用该脚本和技术规格来获取任何其他属性aria2存储。
评论中的最新情况:
正如ilkkachu所暗示的,.aria2文件中的BITFIELD似乎实际上是一个映射:每个位对应于一个文件块,1表示“下载”(0表示“未下载”)。BITFIELD长度给出了块的数量(块大小很可能就是文件的大小除以块号)。我确信下载进度是由BITFIELD中的1s与块数的比率来实现的。不幸的是,AFAICT,.aria2文件似乎是经过一些延迟更新,或一旦下载被中断。
发布于 2020-05-13 10:00:38
考虑到了解aria2在下载上有多远的问题,有几种选择。
正如注释中所讨论的,信息在控制文件(filename.aria2)中的位图中。它被记录在https://aria2.github.io/manual/en/html/technical-notes.html中。拥有一个位图对HTTP下载没有多大意义,从一开始就线性地下载,但我认为对于BitTorrent下载或类似的下载更有意义。
下面是用于特定下载的控制文件的十六进制转储,其中标记了重要字段(od -tx1 file.aria2):
0000000 00 01 00 00 00 00 00 00 00 00 00 10 00 00 00 00
^^^^^^^^^^^ ^^^^^^
0000020 00 00 82 9d c0 00 00 00 00 00 00 00 00 00 00 00
^^^^^^^^^^^^^^^^^ ^^^^^^
0000040 01 06 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
^^^^^ ^^^...
0000060 ff ff ff ff ff ff ff ff ff fe 00 00 00 00 00 00
offset 10: 00 10 00 00 => piece length = 0x100000 = 1 MiB
offset 14: 00 00 00 00
82 9d c0 00 => file length = 0x829dc000 = 2191376384 (~ 2 GiB)
offset 30: 00 00 01 06 => size of bitmap = 0x0106 = 262 bytes, could fit 2096 pieces
offset 34: ff ff ... => bitmap计算位图中的设置位,在下载至少191个1 MiB (200278016字节)后,该特定的下载被中断,这与我得到的文件大小( 201098200字节)基本吻合。(实际的文件比MiB大一点,控制文件中的飞行中片段的记录可能会标记这一点,但我并不在意。我没有预先分配,只是为了与文件系统上的大小交叉检查。)
默认情况下,aria2c每60秒保存一次控制文件,但我们可以使用--auto-save-interval=<secs>来更改该文件:
--auto-save-interval=<SEC>
Save a control file(*.aria2) every SEC seconds. If 0 is
given, a control file is not saved during download. aria2
saves a control file when it stops regardless of the
value. The possible values are between 0 to 600.
Default: 60或者,我认为您可以使用aria2c --log=<logfile>并将下载进度从日志中提取出来。虽然进度似乎只显示在DEBUG级别消息中的写缓存条目,但是在启用这些条目时,日志相当冗长。
另外,您可以使用--summary-interval=1将一些进度输出打印到stdout,可能会重定向到某个日志文件(也许还可以使用--show-console-readout=false隐藏实时读出)。虽然它似乎只给出了四舍五入的数字:
*** Download Progress Summary as of Wed May 13 12:57:11 2020 ***
=================================================================
[#b56779 1.7GiB/2.0GiB(86%) CN:1 DL:105MiB ETA:2s]
FILE: /work/blah.iso
-----------------------------------------------------------------https://unix.stackexchange.com/questions/586147
复制相似问题