避免使用 wget 创建多个文件

避免使用 wget 创建多个文件

我曾经wget每 10 秒调用一次链接,如下所示:

#/bin/sh
while true; do
    wget http://www.some.random.link/to/some/PHP/script
    sleep 10
done

这将生成名为script_name.#where 的空文件#,每次运行时都会增加该文件。

为什么会发生这种情况?

答案1

这是因为 wget 会下载脚本的输出(可能为空)并将其保存到文件中,每次都附加一个数字,以免覆盖先前下载的文件。

有几种方法可以防止这种情况发生。

  1. 使用以下选项防止 wget 下载任何内容--spider
    wget --spider http://www.some.random.link/to/some/PHP/script
    但是,这可能会导致您的脚本无法工作,因为 IIRC,它仅发出一个HEAD请求。
  2. 下载输出,但将其发送到以下地址以丢弃/dev/null
    wget -O /dev/null http://www.some.random.link/to/some/PHP/script
  3. 下载输出,但随后删除,使用以下--delete-after选项:
    wget --delete-after http://www.some.random.link/to/some/PHP/script
  4. 为了完整起见,如果您可以忍受一个文件,请使用该-nc选项来阻止 wget 下载本地已存在的文件:
    wget -nc http://www.some.random.link/to/some/PHP/script

答案2

作为替代修复,您可以避免使用wget- 顾名思义,它旨在获得从给定的 URL 下载 Web 内容。换句话说,它被设计为一个“下载”工具。(当然,它非常灵活,正如 Indrek 在他的回答中所展示的那样。但它的默认设置与你的目的背道而驰。)

因为你不需要或实际下载任何内容(您只是访问 URL 来启动服务器端脚本),该curl命令更适合您的脚本。默认情况下,它会将其请求的结果写入 stdout,而不是文件。

因此,只需在上面的代码中替换wget即可curl 解决文件创建问题,无需进一步的操作。

相关内容