リモートファイルがローカルファイルよりも最新でない場合は、wgetからステータスエラーを受け取る

リモートファイルがローカルファイルよりも最新でない場合は、wgetからステータスエラーを受け取る

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 $?失敗したときに終了コードが表示され、成功したがファイルが一致した場合でも表示されます。wgetwget1wget

式の値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またはを追加するだけです。--timestampingwget --timestamping -c http://example.com/foo

関連情報