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

각 행의 첫 번째 부분만 필요하므로 나머지 부분을 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텍스트나 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)
    

관련 정보