원하는 파일 중 일부를 호스팅하는 웹사이트를 찾았지만 파일이 너무 많아서 개별적으로 다운로드할 수 없었습니다. 파일 이름은 상당히 표준적이고 재현 가능한 형식입니다(예: 1_a, 1_b, 1_c 등).
Linux 명령줄을 사용하여 wget
자동으로 다운로드할 수 있는 방법이 있습니까? 한 줄에 1개의 항목이 있는 텍스트 파일에 파일 이름을 쉽게 넣고 명령줄에 거기에서 보도록 지시할 수 있지만 전체 URL이 아니라 변경된 부분만 있으므로 명령은 다음과 같아야 합니다.
wget url.com/files/(bit from file).doc sourcefile.txt
기본적으로 소스 파일의 항목을 대괄호 안의 비트로 바꿀 수 있습니다.
또한 한 단계에서는 큰 덩어리(수백 개)의 파일에 순차적으로 번호가 매겨지므로 해당 비트에 대해 for 루프를 사용할 수 있습니까? 그렇다면 명령줄에서 구문적으로 이 작업을 어떻게 수행합니까?
답변1
for 루프를 사용할 수 있습니다:
for x in a b c d e f g h ; do
wget http://url.com/$x.doc
done
이것은 bash에서 다음과 같이 단축될 수 있습니다.
for x in {a..h} ; do
wget ...
done
그러나 for 루프가 없어도 다음 단축어를 사용할 수 있습니다.
wget http://url.com/{a..h}.doc
이름이 연속적이지 않고 파일에서 읽어야 하는 경우 while 루프를 사용하세요.
while read x ; do
wget http://url.com/$x.doc
done < sourcefile.txt
답변2
상대 URL을 사용하여 파일을 생성한 경우 다음을 수행할 수 있습니다.
wget -i /path/to/file -B http://base_url_here
예를 들어 , ... 와 같이 다양한 항목이 포함될 수 있는 http://www.myfiles.com/*.txt
항목을 다운로드하려는 경우 해당 항목이 포함된 파일을 생성하면 됩니다.*
a
a_1
a.txt
a_1.txt
a_2.txt
...
그리고 다음 명령을 입력하세요:
wget -i /path/to/file -B http://www.myfiles.com
이 스위치는 해당 링크가 파일에서 읽혀짐을 -i
나타내고 , 이 스위치는 파일에서 읽은 모든 링크에 지정된 매개변수를 기본 URL로 추가함을 나타냅니다.wget
-B
답변3
당신은 그것을 사용할 수 있습니다httrack
전체 파일 디렉터리(기본적으로 미러 사이트의 모든 항목)를 다운로드하거나 파일 httrack
만 다운로드하는 등 특정 파일 확장자와 함께 필터를 지정할 수 있습니다..pdf
다음에 대해 더 자세히 읽을 수 있습니다.httrack
필터링 용량특정 방식으로 이름이 지정된 파일만 다운로드하려는 경우 이 방법을 사용해야 합니다.
다음은 와일드카드 기능의 몇 가지 예입니다.
*[file]
또는*[name]
- 예를 들어 /가 아닌 파일 이름이나 이름이 있습니까? 그리고;*[path]
- 임의의 경로(및 파일 이름), 예를 들어 그렇지 않습니까? 그리고;*[a,z,e,r,t,y]
- a, z, e, r, t, y의 문자*[a-z]
- 어떤 편지*[0-9,a,z,e,r,t,y]
- 0..9와 a,z,e,r,t,y 사이의 모든 문자
예
$ httrack http://url.com/files/ -* +1_[a-z].doc -O /dir/to/output
스위치는 다음과 같습니다:
-*
- 다운로드할 콘텐츠 목록에서 모든 콘텐츠를 삭제하세요.+1_[a-z].doc
- 1_a.doc, 1_b.doc 등의 파일을 다운로드합니다.-O /dir/to/output
-여기에 결과를 쓰세요