wget:入力データファイルを動的に変更するときにURLのリストを取得します。

wget:入力データファイルを動的に変更するときにURLのリストを取得します。

この問題により現在問題が発生しました。
正常に動作しません。

ファイルがあります。子供の鬼オーディオサンプルをダウンロードする必要があるため、HTMLソースファイルを他の場所から解析して内部(16進数)ファイル名を削除して内部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

各行の最初の部分だけが必要なので、残りの部分を選択的awkcut削除しようとしますが、即座に次のことを行います。

$ 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テキストやHTMLファイルではないということです。 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中央中心のアプローチは、もともと期待から約1バイトほどずれていました。文法エラーのコメント:

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

おすすめ記事