我想将wget与-O / - output-document选项(保存输出到指定文件名)和--backups选项(在给定数量的备份之间轮换)一起使用。
简单的测试用例:
wget http://google.com -O myfile --backups=7
必须至少运行两次才能测试备份行为。
预期的行为:运行两次后,输出目录中的myfile.1
和myfile
都会有不同的时间戳。
实际行为:它只是覆盖myfile
,未创建myfile.1
。
根据--backups选项的文档: (https://www.gnu.org/software/wget/manual/wget.html),
“ - 备份=备份”
在写入文件之前(之后),通过在文件名中添加“.1”后缀(VMS上的“_1”)来备份现有文件。此类备份文件将轮换为“.2”,“。3”等,直至备份(并且超出此范围)。
如果不首先备份现有文件,则不应覆盖它。没有提到这个选项或-O / - output-document选项,它们不应该一起工作。
这是对的吗?我错过了什么吗?这是一个错误吗?
我可以在-O/--output-document
部分看到它:
使用'-O'并不意味着简单地“使用名称文件而不是URL中的文件;”而是类似于shell重定向:'wget -O file http://foo'是打算像'wget -O - http://foo>一样工作文件';文件将被立即截断,所有下载的内容都将被写入。
尽管如此,我并不认为--backups
不应该工作,因为它仍然是一个有用的功能,即使将所有输出连接到单个文件也是如此。
还有其他办法吗? (我想我可以编写自己的备份旋转脚本,但这很痛苦 - 寻找已经预先制作好的东西。)
非常感谢你。
答案 0 :(得分:0)
我一直在使用的解决方法是不使用-O
;相反,我只是让它将输出保存到默认文件名(通常为index.html@param=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 "index.html@param=xyz123" ${dest_filename}
根据我的经验,像上面这样调用wget最终会出现像index.html@param=xxx
这样的文件名......你的里程可能会有所不同;只需运行wget并查看生成的输出文件名,就可以轻松查看目标文件名。
使用文件名整形或搜索命令等可能会处理导致输出文件名不易预测的传感器应用程序。