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

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

문제

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

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

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

도움이 되었습니까?

해결책

당신은 통과해야합니다 -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/

다른 팁

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

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

비슷한 문제를 가진 다른 사람에게. WGET가 따릅니다 robots.txt 사이트를 잡을 수 없을 수도 있습니다. 걱정하지 마십시오. 꺼질 수 있습니다.

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

http://www.gnu.org/software/wget/manual/html_node/robot-exclusion.html

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

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

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

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

다음은 서버 디렉토리에서 파일을 다운로드하는 데 도움이 된 완전한 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/

만약에 --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
wget -r http://mysite.com/configs/.vim/

나를 위해 일합니다.

아마도 당신은 그것을 방해하는 .wgetrc를 가지고 있습니까?

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

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

필요한 것은 두 깃발입니다. 하나는 하나입니다 "-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 매뉴얼, 그들은 섹션 4.3의 끝을 향해 매우 깨끗한 예를 가지고 있습니다.

-R을 추가하여 간단히 할 수 있어야합니다.

wget -r http://stackoverflow.com/

WGET 1.18은 더 잘 작동 할 수 있습니다. 예를 들어, 나는 버전 1.12 버그에 물린 곳 ...

wget --recursive (...)

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

해결 방법은 약 301 개의 리디렉션을보고 새 위치를 시도하는 것이 었습니다. 새 URL이 주어지면 WGET는 디렉토리에 모든 파일을 가져 왔습니다.

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

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/"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top