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


13

ファイルのダウンロードと操作を伴うスクリプトを書いていますが、作業する前にファイルが不完全になっていないことを確認したい(たとえば、接続の切断など)。

回答:


10

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

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

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

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

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

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



7

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

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

#!/bin/bash

wget foo.tgz &> /dev/null

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

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


4
代わりに行うかもしれません:wget -q ... || { handle ; error ; }
mikeserv 14年

@mikeservそれがあることさえ知らなかった、いい感じ
クリーク14年

1
man読んで答えを読んでいるうちにそれを見つけただけで、私が言おうとしていた2つのことはすでに2つの答えでここにあったので、私は2つのコメントをしました。あなたにもいい感じです。
mikeserv 14年

torのようなSOCKSプロキシで使用すると、これは機能しないと予想されます。
CodesInChaos

1
@Creek私が意図したことはwget、たとえそれが壊れたとしても、ダウンロードが完了したと思うかもしれないということです。デフォルトで終了TCPを終了マークとして使用するため、HTTPで問題があるTCP接続の切断とTCP接続の切断に関するプロキシ情報。そのため、一括ダウンロードを実行したときに、ヘッダーのファイルサイズがダウンロードしたファイルサイズと一致するかどうかのチェックを追加しました。wgetこのような一貫性チェックを行うかどうか、またはこの問題に関するhttp仕様の内容は不明です。
CodesInChaos 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.