末尾のゼロバイト以外のファイルサイズを取得する

末尾のゼロバイト以外のファイルサイズを取得する

ダウンロードしているファイルのサイズを知りたいです。ファイルは事前に割り当てられているため、を使用するとdu -sd最終的なフルサイズのみが返されます。私はどれだけダウンロードされたかを知りたいので、次のゼロバイトを計算したくありません。このサイズはどのように入手できますか?

aria2cこれは、停止したダウンロードを簡単に再開でき、ダウンロードの長さを保存しないようです。対応する制御(セッション)ファイル。私は書いたスクリプトtotal_length.aria2制御ファイルから読み込みます。しかし、これはダウンロードの長さではなく完全な長さです。このスクリプトを簡単に使用でき、技術仕様aria2 ストアの他の属性を取得します。

コメントの更新:

ilkkachuが暗示したように、.aria2ファイルのBITFIELDは実際にはマップのようです。各ビットはファイルブロックに対応し、1は「ダウンロードされない」を意味し、0は「ダウンロードされない」を意味する。ビットフィールドの長さはブロック数を表します(ブロックサイズはファイルサイズをブロック番号で割ることができます)。ダウンロードの進行状況は、BITFIELDのチャンク数に対する1秒の割合で提供されると確信しています。残念ながら、AFAICT、.aria2ファイルは遅延の後、またはダウンロードが中断された直後に更新されるようです。

ベストアンサー1

ダウンロードの進行状況を知っている問題だけを考慮すると、aria2いくつかのオプションがあります。

説明で説明されているように、この情報はfilename.aria2制御ファイル()のビットマップにあります。に記録されています。https://aria2.github.io/manual/en/html/technical-notes.html。 HTTPダウンロードは最初から線形的であるため、ビットマップを持つことはHTTPダウンロードにあまり意味がありませんが、BitTorrentダウンロードなどについてはもっと意味があると思います。

以下は、ダウンロードした特定の制御ファイルの16進ダンプで、重要なフィールドは(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

ビットマップに設定されたビット数を数えてみると、1MiB(200278016バイト)の最小191ファイルをダウンロードした後、この特定のダウンロードが中断されました。これは私が得た結果のファイルサイズ(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
-----------------------------------------------------------------

おすすめ記事