gpt4 book ai didi

bash 脚本重复数据删除

转载 作者:行者123 更新时间:2023-11-29 09:04:45 25 4
gpt4 key购买 nike

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

虽然这个文件不会经常更改,所以如果下载的文件已经存在,我想丢弃它。

最简单的方法是什么?

谢谢!

最佳答案

你真的需要压缩文件吗?
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

这样就完成了;

关于bash 脚本重复数据删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com