wget을 사용하여 임의의 파일이있는 디렉토리를 재귀 적으로 가져 오기


573

구성 파일을 저장하는 웹 디렉토리가 있습니다. wget을 사용하여 해당 파일을 가져 와서 현재 구조를 유지하고 싶습니다. 예를 들어, 원격 디렉토리는 다음과 같습니다.

http://mysite.com/configs/.vim/

.vim은 여러 파일과 디렉토리를 보유합니다. wget을 사용하여 클라이언트에서 복제하고 싶습니다. 이 작업을 수행하기 위해 wget 플래그의 올바른 콤보를 찾을 수 없습니다. 어떤 아이디어?

답변:


988

당신은 통과해야 -np/ --no-parent에 옵션을 wget(에 추가 -r/ --recursive물론), 그렇지 않으면 상위 디렉토리에 내 사이트에 디렉토리 인덱스에있는 링크를 따릅니다. 따라서 명령은 다음과 같습니다.

wget --recursive --no-parent http://example.com/configs/.vim/

자동 생성 된 index.html파일을 다운로드하지 않으려면 -R/ --reject옵션을 사용하십시오 .

wget -r -np -R "index.html*" http://example.com/configs/.vim/

52
add -nH (호스트 이름을 잘라 냄) --cut-dirs = X (X 디렉토리를 잘라 냄) X에 대한 디렉토리를 수동으로 계산해야하는 것은 약간 성가신
lkraav

3
왜 이들 중 w3.org/History/1991-WWW-NeXT/Implementation에서 작동하지 않습니까 ? robots.txt 만 다운로드합니다
matteo

31
robots.txt가 웹 사이트 크롤링을 허용하지 않기 때문에 @matteo 크롤링을 강제 실행하려면 -e robots = off를 추가해야합니다.
gaborous

특정 디렉토리를 제외하려면 -X / absolute / path / to / folder를 추가하십시오
vishnu narayanan

3
전체 컨텐츠를 다운로드하지 않으려면 다음을 사용할 수 있습니다. -l1 디렉토리 (example.com)를 다운로드하십시오. -l2 디렉토리 및 모든 레벨 1 하위 폴더 ( 'example.com/something'을 다운로드하십시오) 'example.com/somthing/foo') 등등. -l 옵션을 삽입하지 않으면 wget은 -l 5를 자동으로 사용합니다. -l 0을 삽입하면 wget이 찾은 모든 링크를 따르기 때문에 전체 인터넷을 다운로드하게됩니다. stackoverflow.com/a/19695143/6785908
so-random-dude

123

디렉토리를 재귀 적으로 다운로드하려면 index.html * 파일을 거부하고 호스트 이름, 상위 디렉토리 및 전체 디렉토리 구조없이 다운로드하십시오.

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

나는 일이 얻을 수 없습니다 : wget을 -r -nH --cut-DIRS = 3 --no-부모로 받아 들인다 "index.html을 *" w3.org/History/1991-WWW-NeXT/Implementation - -cut-dirs = 2도 작동하지 않습니다. 실제로 루트 폴더에있는 robots.txt 만 다운로드합니다. 내가 실종 되었습니까?
matteo

34
@matteo 추가 : -e robots = off
Paul J

재귀 적 디렉토리 내의 모든 디렉토리를 얻으려면 사용 wget을 -r -nH로 받아 들인다 "index.html을 *" mysite.io:1234/dir1/dir2
Prasanth Ganesan

115

비슷한 문제가있는 다른 사람. Wget follow robots.txt는 사이트를 가져 오지 못할 수 있습니다. 걱정할 필요가 없습니다.

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html


robots.txt를 무시할 때는 최소한 요청을 조절해야합니다. 이 답변에서 제안 된 행동은 매우 무례합니다.
아무도

@ 아무도 그래서 이것에 대한 정중 한 대답은 무엇입니까?
Phani Rithvij

@PhaniRithvij 요청을 제한하고 wget에는 매개 변수가 있습니다. 일부 사람들은 여전히 ​​문제를 겪을 수 있으며 robots 파일이 현재하고있는 작업을 수행 할 수 없다고 명시 적으로 알려주는 경우 법적인 문제가 발생할 수 있습니다.
아무도

37

-m (미러) 플래그를 사용해야합니다. 타임 스탬프를 엉망으로 만들지 않고 무기한 반복됩니다.

wget -m http://example.com/configs/.vim/

이 스레드에서 다른 사람들이 언급 한 점을 추가하면 다음과 같습니다.

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

34

다음은 서버 디렉토리에서 파일을 다운로드하는 데 도움이 된 전체 wget 명령입니다 (무시 robots.txt).

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

8

--no-parent도움 이 되지 않으면 --include옵션을 사용할 수 있습니다 .

디렉토리 구조 :

http://<host>/downloads/good
http://<host>/downloads/bad

그리고 디렉토리 를 다운로드 downloads/good하지 않고 다운로드하려고합니다 downloads/bad.

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good

5
wget -r http://mysite.com/configs/.vim/

나를 위해 작동합니다.

아마도 방해하는 .wgetrc가 있습니까?


5

사용자 이름과 비밀번호를 사용하여 디렉토리를 재귀 적으로 가져 오려면 다음 명령을 사용하십시오.

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

2

Wget 1.18이 더 잘 작동 할 수 있습니다. 예를 들어, 버전 1.12 버그에 물 렸습니다.

wget --recursive (...)

... 모든 파일 대신 index.html 만 검색합니다.

해결 방법은 약 301 리디렉션을 발견하고 새로운 위치를 시도하는 것입니다. 새 URL이 있으면 wget은 디렉토리의 모든 파일을 얻습니다.


2

당신이 필요로하는 일이고, 두 플래그입니다 "-r"재귀 및 대한 "--no-parent"(또는 -np에 갈 수없는 순서대로) '.'".." . 이처럼 :

wget -r --no-parent http://example.com/configs/.vim/

그게 다야. 다음 로컬 트리로 다운로드됩니다 ./example.com/configs/.vim.. 그러나 처음 두 디렉토리를 원하지 않으면 --cut-dirs=2이전 응답에서 제안한대로 추가 플래그를 사용하십시오 .

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

그리고 파일 트리를 ./.vim/

사실, 나는이 답변에서 첫 번째 줄을 wget manual 에서 정확하게 얻었으며 4.3 섹션의 끝 부분에 대해 매우 깨끗한 예를 가지고 있습니다.


2

다음 옵션은 재귀 다운로드를 처리 할 때 완벽한 조합으로 보입니다.

wget -nd -np -P / dest / dir-재귀 http : // url / dir1 / dir2

편의를 위해 매뉴얼 페이지의 관련 스 니펫 :

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

1

-r을 추가하여 간단하게 수행 할 수 있어야합니다.

wget -r http://stackoverflow.com/

9
이것은 실제로 디렉토리를 다운로드하는 것이 아니라 다운로드하려는 디렉토리 위의 디렉토리를 포함하여 서버에서 찾을 수있는 모든 파일입니다.
Luc

1

이 버전은 재귀 적으로 다운로드되며 상위 디렉토리를 생성하지 않습니다.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

용법:

  1. ~/.bashrc터미널에 추가 하거나 터미널에 붙여 넣기
  2. wgetod "http://example.com/x/"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.