
cURL を使用してセットアップ ファイルを定期的にダウンロードする bash スクリプトを作成しています。問題は次のとおりです。ファイルは約 110 MB で、常に同じファイル名になっています。
ファイルをダウンロードし、そのハッシュ (md5、sha1) をチェックして、以前にダウンロードしたファイルと比較することができます。
- ハッシュが等しい場合、ファイルは同じであり、更新されていません。この場合、理由もなくダウンロードしたことになります。
- ハッシュが異なる場合、Web サーバー上のファイルは新しいバージョンです。この場合、このファイルを使用して新しいバージョンに更新します。
このスクリプトを 30 分ごとに実行したいのですが、無駄に 110 MB (同じファイル バージョン) をダウンロードするのは面倒です。コマンドラインで curl を使用して最初の 500 KB をダウンロードする方法はありますか?
現在の回避策は、HTTP ヘッダーのファイル サイズを比較することですが、それでも上記の質問に対する回答を得て、これが実行可能かどうかを知りたいです。よろしくお願いします。
カール -sI 'http://domain.tld/uri/updater/getLatest.etcenter?c=var&asi=allright' -H 'ホスト: domain.tld' -H 'ユーザーエージェント: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko' -H '受け入れ: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'DNT: 1' -H '接続: keep-alive' | grep 'Content-Length:'
答え1
クライアントとサーバーの両方でファイルの変更日を信頼できますか? 信頼できる場合は、curl
の-z
オプションを使用して、HTTP の「条件付き GET」/「If-Modified-Since」機能を使用できます。何もダウンロードする必要はありません。これは、最初からあらゆる場所で頻繁に使用されてきた HTTP プロトコルの組み込み機能です。
サーバー上のファイルの変更日が前回ダウンロードしたファイルの変更日よりも新しくない場合は、何もダウンロードする必要はありません。
スクリプトではbash
、 を使用してstat(1)
ローカル ファイルの変更時刻を見つけ、その情報を に取り込むことを検討してくださいcurl -z …
。