web-dev-qa-db-ja.com

ダウンロードしたファイルが完全であるか壊れているかを確認できるコマンドラインメソッドはありますか?

私はファイルのダウンロードと操作を含むスクリプトを書いており、ファイルを操作する前に(接続の切断などにより)ファイルが不完全でないことを確認したいと思います。

13
Clare

ダウンロードしたファイルの整合性を確認する最も一般的な方法は、MD5チェックサムを使用することです。これは、実際に公開されているファイルのMD5チェックサムからダウンロードしているサイトを想定しています。ダウンロードしたファイルの独自のチェックサムを作成し、それを公開されているチェックサムと比較することで、MD5チェックサムを検証できます。それらが同一の場合、ダウンロードしたファイルは完全で改ざんされていません。

ダウンロードしているファイルが変更されると思わない場合は、チェックサムを事前に計算してスクリプトにハードコーディングできますが、ファイルが更新されると検証が失敗します。

ファイルのMD5チェックサムを作成するには、md5sum myFileを実行します。 wgetの場合、特にダウンロードするファイルが大きい場合に、このコマンドが役立つことがあります。

wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM

これにより、ダウンロード中に「myFile」のチェックサムが作成され、ファイルMD5SUMに保存されるため、時間を節約できる可能性があります。

接続が切断された場合は、wgetの終了コードを確認するのが最善の方法だと思います。エラーなしでダウンロードが成功した場合、wgetは0を返します。他の何かは何かがうまくいかなかったことを示します。 man wgetの「終了ステータス」セクションをご覧ください。

10
arnefm

ファイルのダウンロードに使用されたコマンドの戻りコードは、コマンドが正常に実行されたかどうかを通知します。通常、戻りコード0は成功を示し、ゼロ以外の数値はエラーを示します。 $?変数を介して戻りコードにアクセスできます。

wgetを使用した基本的な例は次のようになります:

#!/bin/bash

wget foo.tgz &> /dev/null

if [[ "$?" != 0 ]]; then
    echo "Error downloading file"
else
    echo "Success"
fi

&> /dev/nullはwgetのすべての出力を/dev/nullにリダイレクトするため、スクリプトの作成に理想的ですが、wgetエラーのデバッグがより困難になります。

7
Creek