--mirror를 사용하면 wget은 슬래시로 끝나지 않는 링크의 index.html을 건너뜁니다.

--mirror를 사용하면 wget은 슬래시로 끝나지 않는 링크의 index.html을 건너뜁니다.

저는 웹사이트를 미러링하기 위해 wget --mirror --convert-links를 사용하고 있는데, 웹사이트에 하위 디렉터리에 대한 링크가 포함되어 있는 경우를 발견했습니다. 예를 들면 다음과 같습니다.

<a href="subdir">

그러면 웹 브라우저에 subdir/index.html의 내용이 표시되고, wget은 index.html에 링크된 문서를 가져오지만 index.html 자체는 가져오지 않습니다.

링크를 다음으로 변경하면:

<a href="subdir/">

그런 다음 index.html도 얻습니다.

이 작업을 자동으로 수행하도록 wget 명령에 플래그를 넣을 수 있습니까?

CentOS 7에서 wget 버전 1.14를 사용하고 있습니다.

답변1

Wget은 페이지를 subdir.

문서 -Esubdir.html.

답변2

나는 또한이 문제에 직면했습니다. pure 로는 이런 일이 불가능하다는 것이 오래 전부터 알려져 있었던 것 같습니다 wget. 하나 열었어요wget 추적기 관련 문제. 여기서는 제가 생각한 몇 가지 해결책을 제시합니다.

수동으로 디렉토리 다운로드

먼저, 가능한 모든 것을 다운로드해야 합니다:

wget -c --no-check-certificate --recursive --page-requirements --no-clobber --domains mysite.org --exclude-directories=/loginhttps://mysite.org

그런 다음 find저장해야 하는 로컬 디렉터리 목록을 수동으로 저장합니다( ).-type d

find mysite.org -path 'mysite.org/static' -prune -o -type d

~부터변화 없는사람들이 볼 가능성이 거의 없으며 다른 이름으로 저장하지 않습니다.index.html, 해당 경로에 대한 검색 find-prune비활성화됩니다. 좀 더 자세한 설명이 있어요스택 오버플로. 다중 경로를 비활성화하려면 괄호를 사용하십시오. 전체 스크립트는 다음과 같습니다:

for dir in `find mysite.org \( \
        -path 'mysite.org/static' -o \
        -path 'mysite.org/media' \)
    -prune -o -type d`
do
    echo $dir
    wget --force-directories $dir -O $dir/index.html
done

파일을 하나씩 다운로드하므로 전체 로컬 경로를 사용하여 저장합니다 --force-directories(그렇지 않으면 현재 디렉터리에 저장됩니다). 또한 -O출력 파일 이름에 옵션을 수동으로 제공해야 합니다 (그렇지 않으면 wget결과를 기존 디렉터리에 저장하는 것이 거부됩니다).

불행하게도 디렉토리 도 find나열되어 있으므로 나중에 사용할 수 있습니다 (저는 무시했습니다). 원하는 디렉터리 이름을 파일에 저장하고 사용할 수도 있습니다 . 하지만 이 경우 이러한 링크에 대한 출력 파일 이름을 제공할 수 없습니다.staticmediagrepwget -i links.txt

디렉토리만 다운로드

디렉토리(슬래시로 끝나는 링크)만 다운로드해 보았습니다.

wget -pr -A '/,index.html' https://mysite.org/

다음은 -A/--accept허용할 파일 이름 접미사 또는 패턴의 쉼표로 구분된 목록입니다. -p이전과 마찬가지로 페이지 필수 사항을 저장하고(로컬 디렉터리 구조도 저장함) -r재귀를 위한 것입니다. 첫 번째 접미사는 디렉터리("/"로 끝남)가 있음을 의미하고, 두 번째 접미사는 이 디렉터리를 저장하는 데 필요함을 의미합니다.index.html즉시 삭제됩니다.

불행히도 일부 링크는 슬래시로 끝나고 일부는 그렇지 않기 때문에 내 사이트에서는 작동하지 않습니다. "디렉터리" 경로와 최종 링크를 구별할 수 있는 다른 방법이 없었고, 링크 끝에 있는 슬래시가 중복된 기호처럼 보였기 때문에 아이디어를 포기했습니다.

마지막 댓글

사이트를 다운로드하는 데 시간이 걸릴 수 있으므로 서버에서 다운로드하고 잠시 후 연결을 끊고 싶다면 를 사용하세요 nohup.

제가 발견한 이상한 점을 언급하고 싶습니다. 때때로 wgethtml 페이지가 서버 응답과 함께 저장됩니다. 즉, 페이지 시작 부분에서 몇 줄의 기술 정보를 볼 수 있습니다("HTTP/1.1 200 OK" 등). 이것이 wget이전 서버의 문제 인지는 확실하지 않지만 nginx손상된 페이지를 다시 다운로드하여 수동으로 수정할 수도 있습니다.

grep -RIl nginx * > bad.txt
wget -x -i bad.txt

손상된 페이지가 존재하는 경우 다시 다운로드되지 않으므로 먼저 손상된 페이지를 삭제하십시오(또는 wget페이지를 덮어쓸 키를 찾을 수 없음).-r-p

이 세부 사항은 질문과 관련이 없을 수도 있지만 wget결과를 얻으려면 여전히 수동 개입이 필요하며 그에 대비해야 함을 보여줍니다.

관련 정보