5

シェルスクリプトがあります。cronジョブは1日1回実行します。現時点では、wgetを使用してWebからファイルをダウンロードし、ファイル名にタイムスタンプを追加してから圧縮します。基本的なもの。

ただし、このファイルはあまり頻繁に変更されないため、ダウンロードしたファイルが既に存在する場合は破棄したいと思います。

これを行う最も簡単な方法は?

ありがとう!

4

4 に答える 4

5

本当にファイルを圧縮する必要がありますか?明らかにタイムスタンプをオンにするを
wget提供します。-N, --timestampingつまり、ファイルはwww.example.com/file.txtにあります。

初めて行う場合:

$ wget -N www.example.com/file.txt
[...]
[...] file.txt saved [..size..]

次回は次のようになります。

$ wget -N www.example.com/file.txt
Server file no newer than local file “file.txt” -- not retrieving.

サーバー上のファイルが更新された場合を除きます。

ファイルを圧縮しなかった場合、それはあなたの問題を解決するでしょう。
本当に圧縮する必要がある場合は、新しいファイル/アーカイブのハッシュと古いファイルのハッシュを比較することにします。その場合に重要なのは、ダウンロードしたファイルの大きさです。最初に圧縮してからハッシュをチェックする価値はありますか?古いアーカイブを解凍してハッシュを比較する価値はありますか?古いハッシュをtxtファイルに保存する方が良いですか?これらはすべて、古いファイルを上書きするよりも有利ですか?

あなたはそれを知っているだけです、いくつかのテストをしてください。


したがって、ハッシュ方式を採用する場合は、sha256およびxz(lzma2アルゴリズム)圧縮を検討してください。
私はこのようなことをします(Bashで):

newfilesum="$(wget -q www.example.com/file.txt -O- | tee file.txt | sha256sum)"
oldfilesum="$(xzcat file.txt.xz | sha256sum)"
if [[ $newfilesum != $oldfilesum ]]; then
    xz -f file.txt # overwrite with the new compressed data
else
    rm file.txt
fi

これで完了です。

于 2011-06-12T14:39:36.227 に答える
1

Calculate a hash of the content of the file and check against the new one. Use for instance md5sum. You only have to save the last MD5 sum to check if the file changed.

Also, take into account that the web is evolving to give more information on pages, that is, metadata. A well-founded web site should include file version and/or date of modification (or a valid, expires header) as part of the response headers. This, and quite other things, is what makes up the scalability of Web 2.0.

于 2011-06-12T14:23:35.923 に答える
0

ファイルをダウンロードして、「最後に保存した」ファイルと照合してみてはどうでしょうか。

たとえば、初めてダウンロードmyfileして、として保存しmyfile-[date]、圧縮します。また、をlastfile指すなどのシンボリックリンクを追加しmyfile-[date]ます。次回スクリプトを実行するときに、lastfileポイントする内容が新しくダウンロードされたファイルと同じであるかどうかを確認できます。

これがうまくいくかどうかはわかりませんが、私はそれを考えることができます。

于 2011-06-12T14:20:40.910 に答える
0

sumコマンドを使用して、新しいファイルを最後のファイルと比較できます。これにより、ファイルのチェックサムが取得されます。両方のファイルのチェックサムが同じである場合、それらはまったく同じである可能性が非常に高くなります。md5フィンガープリントを取得するmd5という別のコマンドがありますが、このコマンドはすべてのシステムにあります。sum

于 2011-06-12T14:26:32.673 に答える