bash脚本重复数据删除

时间:2011-06-12 14:10:04

标签: bash shell deduplication

我有一个shell脚本。一个cron作业每天运行一次。目前它只是使用wget从Web下载文件,将时间戳附加到文件名,然后压缩它。基本的东西。

此文件不会经常更改,因此我想丢弃已下载的文件(如果已存在)。

最简单的方法吗?

谢谢!

4 个答案:

答案 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)

您可以使用sum命令将新文件与最后一个文件进行比较。这需要文件的校验和。如果两个文件具有相同的校验和,则它们非常非常可能完全相同。还有另一个名为md5的命令,它接受md5 指纹,但sum命令在所有系统上。

相关问题