Man wget 正在告诉:

Man wget 正在告诉:

我正在使用 wget 在 bash 脚本中下载一些文件。我需要像这样使用它:

wget -t 20 --content-disposition $link

这里的问题是,我无法指定输出文件,因为它来自服务器。有没有办法从命令本身获取文件名?那么它被写在哪里以便在脚本中进一步使用它?

多谢!

干杯

答案1

Man wget 正在告诉:

-O file --output-document=file 文档不会写入相应的文件,但会全部连接在一起写入文件。如果将 - 用作文件,文档将打印到标准输出,从而禁用链接转换。(使用 ./- 打印到名为 - 的文件。)使用 -O 并不意味着“使用名称 file 代替 URL 中的名称 ;”而是类似于 shell 重定向:wget -O file http://foo 的工作方式类似于 wget -O - http://foo > file;文件将立即被截断,所有下载的内容都将写入那里。

因此,不支持将 -N(用于检查时间戳)与 -O 结合使用:由于文件始终是新创建的,因此它将始终具有非常新的时间戳。如果使用此组合,则会发出警告。

同样,将 -r 或 -p 与 -O 一起使用可能无法按预期工作:Wget 不会只将第一个文件下载到文件,然后将其余文件下载到其正常名称中:所有下载的内容都将放在文件中。此功能在版本 1.11 中被禁用,但在 1.11.2 中已恢复(带有警告),因为在某些情况下,此行为实际上会派上用场。

请注意,仅在下载单个文档时才允许使用 -k 组合,因为在这种情况下,它只会将所有相对 URI 转换为外部 URI;当多个 URI 都被下载到单个文件时,-k 对于多个 URI 毫无意义

简短回答

wgetOutPut=filename_or_fullpath_and_name
wget -t 20 --content-disposition $link -O $wgetOutPut

答案2

感谢您的帮助,但它并不能解决问题:我需要来自服务器的文件名来下载。这个名字正是我在脚本中所需要的。

对于我来说,目前的解决方案是这样的:

file_name=$(wget -nv -t 20 --content-disposition "$link" 2>&1 | cut -d\" -f2)

然后我得到了名字并可以下载文件..有点愚蠢,但它有效。

相关内容