wget -c http://example.com/foo
ファイルを定期的に更新するときにwget
最後のダウンロード以降にファイルが更新されていない場合にエラー状態を確認する方法はありますか?
それは次のとおりです。
$ wget --give-error-if-file-is-not-updated -c http://example.com/foo
$ echo $?
1
答え1
wget --timestamping
ファイルはリモートタイムスタンプが変更されたかどうかに応じて条件付きでダウンロードされますが、終了コードは0
どちらでも可能です。これはあなたが求めたものを手に入れたことを示しています。テスト終了コードは構文エラーとプロトコルエラーのみを検出できます。
代わりに、前後のファイル日付を確認して、ファイルが最後にダウンロードされてから更新されていないことを確認してください。次のシェルスクリプトフラグメントは、それを必要な終了コードに変換する方法を示しています。
OLD=` date -r$FILE +%s 2>/dev/null ` # capture age of file before
wget --timestamping $FILE || exit $? # update file, die on error
NEW=` date -r$FILE +%s 2>/dev/null ` # capture age of file after
[ "$NEW" = "$OLD" ] && exit 1 # compare ages, die when they match
このコマンドを実行すると、echo $?
失敗したときに終了コードが表示され、成功したがファイルが一致した場合でも表示されます。wget
wget
1
wget
式の値date -r$FILE +%s 2>/dev/null
は、$FILE
エポック以降の秒数であるか、情報がない場合(ファイルが欠落している場合など)、空の文字列です。比較したいときに便利な形です。
--timestamping
コードスニペットにはこのオプションは必要ありません。これはwget
、このオプションを使用するかどうかに関係なく、ローカルファイルタイムスタンプがリモートファイルタイムスタンプと一致するように設定されているためです。このオプションは、wget
リモートファイルが変更されていない場合にのみ重複ファイル転送を防止します。
答え2
Wgetはこの機能を「タイムスタンプ」と呼びます。に記録されています。https://www.gnu.org/software/wget/manual/wget.html#Time_002dスタンピング。これを使用するには、コマンドラインに-N
またはを追加するだけです。--timestamping
wget --timestamping -c http://example.com/foo