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

我尝试了’-N’和’-no-clobber’,但得到的唯一结果是检索现有 example.exe 的一个新副本,其中使用这个 synax‘ example.exe. 1’添加了一个数字。这不是我想要的。我只需要下载和覆盖文件 example.exe 在同一个文件夹中,我已经保存了 example.com 的一个副本,没有 wget 验证,如果矿是旧的或新的尊重 onexample.exe 文件已经存在于我的下载文件夹。你认为我是否有可能或者我需要创建一个脚本来删除 example.exe 文件或者改变他的修改日期等等?

109737 次浏览

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

例如:

wget -O index.html bbc.co.uk

多次运行将保持重写 index.html。

除非使用选项 -O在命令行上显式命名输出文件,否则 wget不允许覆盖现有文件。

我有点懒,我不想在命令行上输入输出文件名,因为它已经从下载的文件中知道了。因此,我这样使用 curl:

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

从不安全的网站下载这样的文件时要小心。上面的命令会写一个文件,命名为连接的网站希望命名它(在工作目录内)。最终名称可能通过重定向和 php 脚本隐藏,或者在 URL 中被混淆。您最终可能会覆盖您不想覆盖的文件。

如果你以这种方式使用 curl之后,在工作目录中发现了一个名为 ls的文件或者任何其他诱人的名字,请不要执行下载的文件。它可能是一个木马下载从一个流氓或损坏的网站!

wget --backups=1 google.com

使用 .1后缀重命名 原创的文件,并将新文件写入预定的文件名。

不完全符合要求,但在某些情况下可能很方便。

-c--continue

来自 手动操作:

如果对非空文件使用“-c”,并且服务器不支持 继续下载,Wget 将重新启动下载从头和 完全覆盖现有文件

我喜欢 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.

但那是无害的,只要按下去就行了。我认为它总是得到我想要的文件,即使 wget 用完了重试或连接暂时消失。我用它下载东西好几天了。拨号上的 CD 映像,是的,总是与 wget。

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

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

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

--spider checks if a file exists, and returns 0 if it does
--quiet fail quietly, with no output
-nv is quiet, but still reports errors


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

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

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

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

或者可以使用 basename

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

对于那些不想使用 -O并且只想指定输出目录的用户,可以使用以下命令。

wget \
--directory-prefix "$dest" \
--backups 0 \
-- "$link"

第一个命令将使用 wget 命令从源代码下载 第二个命令将删除旧文件

wget \
--directory-prefix "$dest" \
--backups 0 \
-- "$link"; \
rm '$file.1' -f;