wget:动态修改输入数据文件时检索 URL 列表

wget:动态修改输入数据文件时检索 URL 列表

这个问题目前让我陷入困境。
它只是没有发挥应有的作用。

我有一个文件因普需要下载音频样本,我通过解析 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交换机需要:

  1. 包含 URL 列表的本地文本文件
  2. 包含 URL 列表的远程文本文件
  3. 包含本地文件列表的远程 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.

修复包括:

  1. 使用标准输入对于-i参数按照加雷思·红的评论:

    cut -d' ' -f1 inp | wget -nc -i -
    
  2. 或者这个bash以中心为中心的方法,它与最初的预期相差大约一个字节,根据语法错误的评论:

    wget -nc -i <(cut -f1 '-d ' inp)
    

相关内容