課題
例えば、計測機器はデータを同一ファイル(CSV等)へ追記していくものが多い。この場合、機器から定期的にデータを取り出すには、繰り返してそのファイルをダウンロードする必要がある。しかしこの時ファイルの上部、つまり取得済み部分は毎回送って欲しくない。なぜなら、ムダな通信にあたるから。
対策
wget では "-c" を付ければ、新しい追加部分だけのダウンロードが可能で、通信量を減らすことができる。(注意点あり)
説明
オプション -c(--continue) は、ダウンロード中断の再開時に使用されるが、
https://www.gnu.org/software/wget/manual/wget.html
にも詳しく記述されているように、「受け入れディレクトリにリモートファイルと同じ名前のローカルファイルが存在するなら、それをリモートファイルの上部であるとみなして、そのバイトサイズだけオフセットさせた部分のみをダウンロードしてローカルファイルの後方へ追加させる」という動作をするオプションである。
つまり「追記されたデータやログの新しい部分だけ取得できる。」
もちろん、ファイルサイズが意図せず変化するとズレるので、
- ダウンロードしたファイルを移動、変更しないこと
- ダウンロード元のファイルの上部が変更されないこと
- 転送中断時にそのシグナルをファイルに挿入(未確認)されるケースがあること
が注意点である。
追記
一方 curl は、"-C -"を付ける。なお、こちらはオフセット量を変更することもできるそうです。両方知りませんでしたのでメモ。