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

And*_*ong 25 wget

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

Pet*_*rSW 40

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

例如:

wget -O index.html bbc.co.uk
Run Code Online (Sandbox Code Playgroud)

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

  • 下载时(包括第一次)它也会触及文件,因此文件的原始时间戳将不会像不使用“-O”开关时那样保留。 (3认同)

Fré*_*hal 17

wget除非您在命令行上使用选项明确命名输出文件,否则不会覆盖现有文件-O.

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

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl
Run Code Online (Sandbox Code Playgroud)

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

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

  • 所以基本上,不要使用这种方法 (3认同)
  • 他回答了这个问题:)他说必须使用“wget https://url.com -O filename_to_squash.py”——更重要的是,他解释了为什么人们应该小心下载和运行可执行文件! (2认同)

Ant*_*ins 11

wget --backups=1 google.com
Run Code Online (Sandbox Code Playgroud)

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

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

  • 有趣的是,Windows 上的 wget 版本 1.21.3 git bash 会用 backups=0 覆盖该文件;在这种情况下,“wget http://google.com -O mysavedfile --backups=0”成功覆盖了 mysavedfile。酷,并且符合OP的目的(+我的目的)! (4认同)

3zz*_*zzy 11

-c 要么 --continue

手册:

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

  • 服务器通常支持继续下载. (4认同)
  • 如果服务器不支持继续下载而不是默认行为,则这是一个注释。所以这个答案是错误的。 (2认同)

Ala*_*rey 5

我喜欢 -c 选项。我从手册页开始,然后是网络,但我已经搜索了好几次了。就像您正在转发网络摄像头一样,因此图像需要始终命名为 image.jpg。看起来手册页中应该更清楚。

我已经使用它在后台下载东西几年了,有时与我的 wgetrc 文件中的“limit-rate =”结合使用

while true
do
wget -c -i url.txt && break
echo "Restarting wget"
sleep 2
done
Run Code Online (Sandbox Code Playgroud)

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

 416 Requested Range Not Satisfiable
 The file is already fully retrieved; nothing to do.
Run Code Online (Sandbox Code Playgroud)

但这是无害的,只需按 ctrl-c 即可。我认为即使 wget 重试次数耗尽或连接暂时断开,它也总是能获得我想要的文件。我用它一次下载了好几天的东西。拨号上的 CD 映像,是的,总是使用 wget。


com*_*day 5

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

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

所以我能找到的唯一方法是使用 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
Run Code Online (Sandbox Code Playgroud)

虽然很冗长,但我发现这是必要的。我希望这对某人有帮助。