我正在构建一个小工具,它将使用 wget 下载文件,从不同文件中读取 url。相同的 url 可能存在于不同的文件中;该 url 甚至可能多次出现在一个文件中。多次下载一个页面(每次在列表中找到它的 url)是低效的。
因此,简单的方法是保存下载的文件,并指示 wget 如果它已经存在,则不要再次下载它。
那将非常简单;但是 url 很长(许多 GET 参数),因此不能用于文件名(wget 给出错误“无法写入... [] 文件名太长”)。
所以,我需要重命名下载的文件。但是要使缓存机制起作用,重命名方案需要实现“一个 url <=> 一个名称”:如果给定的 url 可以有多个名称,则缓存不起作用(即,如果我只是按顺序对文件进行编号他们找到了,我不会让 wget 识别哪些 url 已经下载)。
最简单的重命名方案是计算文件名的 md5 哈希值(而不是文件本身的哈希值,这就是 md5sum 所做的);这将确保文件名是唯一的,并且给定的 url 会导致始终相同的名称。
可以在 Perl 等中执行此操作,但可以直接在 bash 中或使用系统实用程序 (RedHat) 完成吗?