2017-07-19 30 views
1

我想将wget同时用于-O/- output-document选项(将输出保存到指定文件名)和--backups选项(在给定数量的备份之间旋转)。使用wget同时具有-O/- output-document和--backups选项(似乎不起作用)

简单的测试案例:

wget http://google.com -O myfile --backups=7

不得不运行至少两次测试备份行为。 预期行为:运行两次后,我会在输出目录中使用myfile.1myfile,并使用不同的时间戳。

实际行为:它只是覆盖myfile,myfile.1未被创建。

根据对--backups选项的文档: (https://www.gnu.org/software/wget/manual/wget.html),

'--backups =备份'

前(过)写入文件,备份一个通过向文件名添加'.1'后缀(VMS上的'_1')来生成现有文件。这样的备份文件被旋转到'.2','.3'等等,直到备份(并且超出了那个)。

它不应该覆盖不先备份现有的文件。在这个选项或者-O/- output-document选项中都没有提到他们不应该一起工作。

这是正确的吗?我错过了什么吗?这是一个错误?

我可以看到,根据-O/--output-document节记载:

的“-O”使用并不打算仅仅意味着“使用该名称的文件,而不是一个在URL;”相反,它类似于shell重定向:'wget -O文件http://foo'旨在像'wget -O - http://foo>文件一样工作。文件将立即被截断,所有下载的内容将被写入。

尽管如此,连接所有输出到一个单一的文件,即使我不认为这意味着该--backups不应该工作,因为它仍然是一个非常有用的功能。

是否有另一种方法可以做到这一点? (我想我可以编写自己的备份轮换脚本,但这很痛苦 - 寻找已经预先制作好的东西)

非常感谢。

回答

0

我一直在使用的解决方法是不使用-O;相反,我只是让它将输出保存为默认文件名(通常为[email protected]=value等),然后将该文件复制到 wget下载它(并执行其备份循环)后,将该文件复制到所需目标

例子:

#!/bin/bash 

# The --restrict-file-names=windows parameter makes the file names wget saves to 
# more predictable and the same on both unix-like & windows hosts, so that our 
# scripts will work both places. In windows filename mode, '?' in filenames are 
# converted to '@'. 
wget --backups=7 http://example.com/?param=xyz123 --restrict-file-names=windows 

# Manually copy files to expected names after download so --backups option will work. 
# (--backups option doesn't work in combination with -O/--output-file as of wget 1.19.1) 
dest_filename="myfile.zip" 
cp -a "[email protected]param=xyz123" ${dest_filename} 

根据我的经验,wget的的调用像上面像[email protected]=xxx名结束了......你的里程可能会有所不同;通过运行wget并查看生成的输出文件名很容易检查目标文件名是什么。

导致输出文件名不太容易预测的Fancier应用程序可能可以使用文件名称或搜索命令等来处理。