먼저 모든 파일을 다운로드하지 않고 wget 재귀의 전체 크기를 어떻게 얻을 수 있습니까?

먼저 모든 파일을 다운로드하지 않고 wget 재귀의 전체 크기를 어떻게 얻을 수 있습니까?
  • 재귀적으로 다운로드해야 하는 큰 항목이 있습니다.
  • 예상 크기 > 150GB(대략적인 크기라고 들었습니다)
  • 이제 수납공간이 없어
  • 따라서 전체 크기가 얼마나 큰지 파악한 다음 더 많은 저장용량을 확보하기 위한 조치를 취해야 합니다.
  • 추가 저장용량을 확보하기 전에 전체 크기를 파악해야 합니다.
  • 대상 URL은 일종의 http 파일 서버에서 호스팅하는 파일 디렉터리입니다.

wget --recursive먼저 모든 파일을 다운로드하지 않고 전체 크기를 얻으려면 어떻게 해야 합니까 ?

참고: 이 질문은 정적 콘텐츠(즉, 동적으로 생성되지 않은 콘텐츠, 즉 콘텐츠 길이가 잘 정의된 콘텐츠)가 포함된 웹 페이지에만 적용됩니다.

답변1

내가 찾은 것은 다음과 같습니다.

#!/bin/bash
tmpdir=$(mktemp -d)
(
cd ${tmpdir}
wget --recursive  -erobots=off --no-parent --spider --server-response http://mirrors.rit.edu/rocky/9.1/BaseOS/x86_64/os/ 2>&1 |grep --line-buffered -i content-length | gawk '{sum+=$2}END{print sum/1e6}'
)
find ${tmpdir} -type d -delete

wget 매개변수 설명:

  • --recursivewget재귀 디렉터리의 모든 파일을 알려줍니다.
  • -erobots파일이 wget있어도 재귀를 계속하도록 지시합니다.robots.txt
  • --no-parentwget내가 원하는 것이 아니기 때문에(아마도 누구도 원하는 것이 아닐 수 있으므로) 위쪽으로(즉, 부모) 재귀하지 말라고 지시합니다 .
  • --spider --server-responsewget각 파일의 헤더만 인쇄하도록 지시합니다 .
    • --spider저는 이 옵션이 실수로 디스크의 모든 파일을 삭제한 줄 알고 이 기능으로 인해 실수로 삭제된 수 기가바이트, 수천 개의 파일을 다운로드했습니다. 그래서 이 동작이 실수로 파일을 삭제하는 것을 막기 위해 임시 디렉터리에서 명령을 실행했습니다.
  • grep내용 길이가 바이트 단위인 줄만 긁도록 지시합니다.
  • gawkTell은 바이트를 합산하고 바이트 수를 MB 단위로 인쇄합니다.

관련 정보