我有一个shell脚本。一个cron作业每天运行一次。目前它只是使用wget从Web下载文件,将时间戳附加到文件名,然后压缩它。基本的东西。
此文件不会经常更改,因此我想丢弃已下载的文件(如果已存在)。
最简单的方法吗?
谢谢!
答案 0 :(得分: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
已经完成了;
答案 1 :(得分:1)
计算文件内容的哈希值并检查新文件的内容。例如,使用md5sum
。您只需保存最后一个MD5总和以检查文件是否更改。
此外,考虑到网络正在发展以提供有关页面的更多信息,即元数据。有充分根据的网站应包括文件版本和/或修改日期(或有效的过期标头)作为响应标头的一部分。这个以及其他一些东西构成了Web 2.0的可扩展性。
答案 2 :(得分:0)
如何下载文件,并根据“上次保存的”文件进行检查?
例如,第一次下载myfile
并将其保存为myfile-[date]
,然后对其进行压缩。它还添加了一个符号链接,例如lastfile
指向myfile-[date]
。下次运行脚本时,它可以检查lastfile
指向的内容是否与新下载的文件相同。
不知道这是否会奏效,但这是我能想到的。
答案 3 :(得分:0)