这个问题目前让我陷入困境。
它只是没有发挥应有的作用。
我有一个文件因普需要下载音频样本,我通过解析 HTML 源文件的其他位置来保留内部 ID 号,以删除内部(十六进制)文件名,如下所示:
http://whatever.site/data/samples/hexfilename1.mp3 12345.mp3
http://whatever.site/data/samples/hexfilename2.mp3 12346.mp3
http://whatever.site/data/samples/hexfilename3.mp3 12347.mp3
http://whatever.site/data/samples/hexfilename4.mp3 12348.mp3
http://whatever.site/data/samples/hexfilename5.mp3 12349.mp3
由于我只需要每行的第一部分,因此我尝试awk
或选择性地cut
剥离其余部分,但要即时进行:
$ wget -nc -i $(cut -f1 '-d ' inp)
分别
$ wget -nc -i $(awk 'print $1' inp)
但它会下载所有的mp3文件,然后磨一会儿,就会发生一些非常奇怪的事情:
--2014-09-01 14:27:25-- http://whatever.site/data/samples/ID3%04
啊。这正是您所想的:确实是wget
在完成常规文件下载(并且应该终止)之后尝试下载的二进制 mp3 文件的第一个字节。但为什么会发生这种情况呢?如果我通过创建一个笨拙的方式输入2临时文件并将wget
其与参数一起使用-i
,它的工作原理:
$ cat inp | awk '{print $1}' > inp2
为什么时差如此之大因普即时修改并直接传递到wget
?最有趣的是,即时变体不能与awk
或一起使用cut
,因此这两种工具都不应该受到指责。
答案1
它不起作用的原因是语法错误:
wget -nc -i $(cut -f1 '-d ' inp)
...问题是-i
交换机需要:
- 包含 URL 列表的本地文本文件
- 包含 URL 列表的远程文本文件
- 包含本地文件列表的远程 HTML 文件。
但上面的代码给出的是-i http://whatever.site/data/samples/hexfilename1.mp3
,它不是文本或 HMTL 文件。 man wget
说:
COLUMNS=72 man wget | grep -m1 -A 22 '\-i '
-i file
--input-file=file
Read URLs from a local or external file. If - is specified
as file, URLs are read from the standard input. (Use ./-
to read from a file literally named -.)
If this function is used, no URLs need be present on the
command line. If there are URLs both on the command line
and in an input file, those on the command lines will be
the first ones to be retrieved. If --force-html is not
specified, then file should consist of a series of URLs,
one per line.
However, if you specify --force-html, the document will be
regarded as html. In that case you may have problems with
relative links, which you can solve either by adding "<base
href="url">" to the documents or by specifying --base=url
on the command line.
If the file is an external one, the document will be
automatically treated as html if the Content-Type matches
text/html. Furthermore, the file's location will be
implicitly used as base href if none was specified.
修复包括: