シェルスクリプトがあります。cronジョブは1日1回実行します。現時点では、wgetを使用してWebからファイルをダウンロードし、ファイル名にタイムスタンプを追加してから圧縮します。基本的なもの。
ただし、このファイルはあまり頻繁に変更されないため、ダウンロードしたファイルが既に存在する場合は破棄したいと思います。
これを行う最も簡単な方法は?
ありがとう!
シェルスクリプトがあります。cronジョブは1日1回実行します。現時点では、wgetを使用してWebからファイルをダウンロードし、ファイル名にタイムスタンプを追加してから圧縮します。基本的なもの。
ただし、このファイルはあまり頻繁に変更されないため、ダウンロードしたファイルが既に存在する場合は破棄したいと思います。
これを行う最も簡単な方法は?
ありがとう!
本当にファイルを圧縮する必要がありますか?明らかにタイムスタンプをオンにするを
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
これで完了です。
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.
ファイルをダウンロードして、「最後に保存した」ファイルと照合してみてはどうでしょうか。
たとえば、初めてダウンロードmyfile
して、として保存しmyfile-[date]
、圧縮します。また、をlastfile
指すなどのシンボリックリンクを追加しmyfile-[date]
ます。次回スクリプトを実行するときに、lastfile
ポイントする内容が新しくダウンロードされたファイルと同じであるかどうかを確認できます。
これがうまくいくかどうかはわかりませんが、私はそれを考えることができます。