gpt4 book ai didi

bash - 如何计算 bash 中字符串(url)的哈希值以进行 wget 缓存

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

我正在构建一个小工具,它将使用 wget 下载文件,从不同的文件中读取 url。相同的 url 可能出现在不同的文件中;该 url 甚至可能多次出现在一个文件中。多次下载一个页面(每次在列表中找到它的 url)是低效的。

因此,简单的方法是保存下载的文件,如果已经存在则指示wget不要再次下载。

那将非常简单;但是 url 非常长(很多 GET 参数),因此不能用作文件名(wget 给出错误“无法写入... [] 文件名太长”)。

所以,我需要重命名下载的文件。但是要使缓存机制起作用,重命名方案需要实现“一个 url <=> 一个名称”:如果给定的 url 可以有多个名称,则缓存不起作用(即,如果我只是按顺序对文件进行编号他们找到了,我不会让 wget 识别哪些 url 已经被下载了)。

最简单的重命名方案是计算文件名的 md5 散列(不是文件本身,这就是 md5sum 的作用);这将确保文件名是唯一的,并且给定的 url 总是产生相同的名称。

可以在 Perl 等中执行此操作,但可以直接在 bash 中或使用系统实用程序 (RedHat) 完成吗?

最佳答案

听起来您需要 md5sum 系统实用程序。

URLMD5=`/bin/echo $URL | /usr/bin/md5sum | /bin/cut -f1 -d" "`

如果你只想在文件名上创建散列,你可以使用 sed 快速获得:

FILENAME=`echo $URL | /bin/sed -e 's#.*/##'`
URLMD5=`/bin/echo $FILENAME | /usr/bin/md5sum | /bin/cut -f1 -d" "`

请注意,根据您的发行版,cut 的路径可能是 /usr/bin/cut

关于bash - 如何计算 bash 中字符串(url)的哈希值以进行 wget 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602378/

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