如何强制wget覆盖忽略时间戳的现有文件?

时间:2015-05-23 22:28:00

标签: wget

我试过' -N'和' - no-clobber'但我得到的唯一结果是使用此synax' example.exe.1'检索现有example.exe的新副本,其中包含一个数字。这不是我想得到的。我只需要下载并覆盖我已经保存了example.com副本的同一文件夹中的example.exe文件,而不是wget验证我的是旧版本还是更新版本尊重我的下载文件夹中已存在的on example.exe文件。你认为我是可能的还是我需要创建一个删除example.exe文件的脚本,或者可能会改变他的修改日期等?

7 个答案:

答案 0 :(得分:33)

如果使用-O选项指定输出文件,它将覆盖任何现有文件。

例如:

wget -O index.html bbc.co.uk

多次运行将保持覆盖index.html。

答案 1 :(得分:15)

除非您使用选项wget在命令行上明确命名输出文件,否则

-O不允许您覆盖现有文件。

我有点懒,我不想在下载文件中已知输入文件名时在命令行输入文件名。因此,我像这样使用curl:

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl

从不安全的网站下载此类文件时要小心。上面的命令将写一个名为连接网站的文件,希望命名它(虽然在当前目录中)。最终名称可能通过重定向和php脚本隐藏,或者在URL中进行模糊处理。您最终可能会覆盖您不想覆盖的文件。

如果您在使用ls之后在当前目录中找到名为curl的文件或任何其他诱人的名称,请避免执行下载的文件。它可能是从流氓或损坏的网站下载的木马!

答案 2 :(得分:9)

wget --backups=1 google.com

使用.1后缀重命名原始文件,并将新文件写入目标文件名。

不完全是所要求的,但在某些情况下可能会派上用场。

答案 3 :(得分:9)

-c--continue

来自manual

  

如果在非空文件上使用'-c',则服务器不支持   继续下载,Wget将从头开始重新下载   完全覆盖现有文件

答案 4 :(得分:2)

我喜欢-c选项。我从手册页开始,然后是网页,但我已经多次搜索过了。就像你正在转发网络摄像头一样,所以图像需要始终命名为image.jpg。似乎在手册页中应该更清楚。

我已经使用这几年来在后台下载内容,有时在我的wgetrc文件中加上“limit-rate =”

while true
do
wget -c -i url.txt && break
echo "Restarting wget"
sleep 2
done

创建一个名为url.txt的小文件,并将文件的URL粘贴到其中。在您的路径中设置此脚本,或者将其设置为别名并运行它。它会一直重试下载,直到没有错误。有时最后会进入显示

的循环
 416 Requested Range Not Satisfiable
 The file is already fully retrieved; nothing to do.

但那是无害的,只需按住ctrl-c即可。即使wget没有重试或连接暂时消失,我认为它总是得到我想要的文件。我用它一次下载了几天的东西。拨号上的CD映像,是的,始终使用wget。

答案 5 :(得分:0)

我的用例涉及两个不同的URL,有时第二个不存在,但如果它存在,我希望它覆盖第一个文件。

使用wget -O的问题是,当第二个文件不存在时,它将用BLANK文件覆盖第一个文件。

所以我能找到的唯一方法是使用if语句:

- spider检查文件是否存在,如果存在则返回0

- 安静地失败,没有输出

-nv很安静,但仍然报告错误

wget -nv https://example.com/files/file01.png -O file01.png
# quietly check if a different version exists
wget --quiet --spider https://example.com/custom-files/file01.png
if [ $? -eq 0 ] ; then    
    # A different version exists, so download and overwrite the first
    wget -nv https://example.com/custom-files/file01.png -O file01.png
fi

这很冗长,但我觉得有必要。我希望这对某人有帮助。

答案 6 :(得分:0)

这里有一个简单的方法来完成参数修剪

url=https://example.com/example.exe ; wget -nv $url -O ${url##*/}

或者你可以使用 basename

url=https://example.com/example.exe ; wget -nv $url -O $( basename $url )