【问题标题】:Using wget with both -O/--output-document and --backups options (doesn't seem to work)将 wget 与 -O/--output-document 和 --backups 选项一起使用(似乎不起作用)
【发布时间】:2017-07-19 18:04:34
【问题描述】:

我想将 wget 与 -O/--output-document 选项(将输出保存到指定的文件名)和 --backups 选项(在给定数量的备份之间轮换)一起使用。

简单的测试用例:

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

必须至少运行两次才能测试备份行为。 预期行为:运行两次后,我将在输出目录中同时拥有 myfile.1myfile,但时间戳不同。

实际行为:它只是覆盖myfilemyfile.1 没有创建。

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

‘--backups=backups’

在(覆盖)写入文件之前,通过在文件名中添加“.1”后缀(VMS 上的“_1”)来备份现有文件。此类备份文件会轮换为“.2”、“.3”等,直至备份(并在此之后丢失)。

如果不先备份现有文件,则不应覆盖。在此选项或 -O/--output-document 选项中都没有提到它们不应该一起工作。

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

我可以在-O/--output-document 部分看到它:

使用“-O”并不意味着简单地表示“使用名称文件而不是 URL 中的文件”;相反,它类似于 shell 重定向:‘wget -O file http://foo’旨在像‘wget -O - http://foo > file’一样工作;文件将立即被截断,所有下载的内容都将写入那里。

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

还有其他方法可以做到这一点吗? (我想我可以编写自己的备份轮换脚本,但这很痛苦——如果可能的话,寻找已经预先制作好的东西。)

非常感谢。

【问题讨论】:

    标签: shell wget gnu


    【解决方案1】:

    我一直在使用的解决方法是不使用-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 并查看生成的输出文件名,即可轻松检查目标文件名。

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

    【讨论】:

    • --output-document 表示“覆盖文件”。如果您不想覆盖该文件,则不应使用--output-document。这听起来很简单;)但最后你应该考虑将--backups--timestamping 结合起来,这样如果文件不是较新的,它就不会重新下载。
    猜你喜欢
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多