- 재귀적으로 다운로드해야 하는 큰 항목이 있습니다.
- 예상 크기 > 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 매개변수 설명:
--recursive
wget
재귀 디렉터리의 모든 파일을 알려줍니다.-erobots
파일이wget
있어도 재귀를 계속하도록 지시합니다.robots.txt
--no-parent
wget
내가 원하는 것이 아니기 때문에(아마도 누구도 원하는 것이 아닐 수 있으므로) 위쪽으로(즉, 부모) 재귀하지 말라고 지시합니다 .--spider --server-response
wget
각 파일의 헤더만 인쇄하도록 지시합니다 .--spider
저는 이 옵션이 실수로 디스크의 모든 파일을 삭제한 줄 알고 이 기능으로 인해 실수로 삭제된 수 기가바이트, 수천 개의 파일을 다운로드했습니다. 그래서 이 동작이 실수로 파일을 삭제하는 것을 막기 위해 임시 디렉터리에서 명령을 실행했습니다.
grep
내용 길이가 바이트 단위인 줄만 긁도록 지시합니다.gawk
Tell은 바이트를 합산하고 바이트 수를 MB 단위로 인쇄합니다.