Linux 명령줄 도구를 사용하여 부분적으로 다운로드된 파일을 복원하는 방법은 무엇입니까?
정전으로 인해 900MB 중 400MB의 대용량 파일을 부분적으로 다운로드했는데, 다시 다운로드를 시작하니 처음부터 다시 시작되었습니다. 400MB로 시작하려면 어떻게 해야 하나요?
답변1
wget
지정하지 않았으므로 파일을 다운로드하는 데 사용하고 있다고 가정합니다 . 이런 경우에는 -c
옵션(예 wget -c <URL>
: )과 함께 사용해 보세요.
사용된 프로토콜이 ftp(URL의 모양 ftp://...
)인 경우 원격 서버가 다운로드 재개를 지원하지 않는 구식/구식 ftp 데몬을 사용하고 있을 가능성이 있습니다(최신 ftp 데몬은 지원하지만 10년이 넘었습니다). , 따라서 가능성은 적습니다). 그러나 이 경우 운이 좋지 않을 수도 있습니다. 반면, 사용된 프로토콜이 http라면 문제가 없을 것입니다. (업데이트: 다른 전문가(아래 설명의 Gilles 포함)에 따르면 복구에는 http를 사용할 때 서버 지원도 필요하므로 이는 ftp와 http 모두에 적용됩니다.
행운을 빌어요.
답변2
다운로드할 파일이 여러 개 있고 파일 중 하나에서 다운로드가 중단된 경우 -c 및 -r이 도움이 될 수 있습니다.
wget -c -r <url>
이 명령은 모든 파일을 확인하고 불완전하거나 다운로드되지 않은 파일만 다운로드합니다. 저는 100개 이상의 대용량 파일을 다운로드해야 했고 서버 친화적인 환경을 위해 다음 옵션을 사용했습니다.
wget -c -r -np -k --wait=15 --limit-rate=50K <url>
답변3
curl -C -
curl
대신 사용하고 싶다면 wget
:
curl -C - -o index.html https://example.com
에서 man
:
"‐C -"를 사용하여 컬이 전송을 재개할 위치/방법을 자동으로 파악하도록 지시합니다. 그런 다음 주어진 출력/입력 파일을 사용하여 문제를 해결합니다.
다음과 같이 빠르고 간단하게 테스트할 수 있습니다.
printf asdf > index.html
curl -C - -o index.html https://example.com
지금 시작하세요 index.html
:
asdfctype html>
<html>
<!do
분명히 파일에 이미 포함되어 있기 때문에 다운로드할 때 처음 4자를 건너뜁니다. 해당 문자가 없으면 asdf
파일은 다음과 같습니다.
<!doctype html>
<html>
서비스 능력 점검:accept-ranges: bytes
증분 다운로드는 다음과 example.com
같은 이유로 작동합니다.
curl -I https://example.com
서버는 다음을 반환합니다.
accept-ranges: bytes
ranges:
컬이 요청을 중간에 시작하도록 요청할 수 있음을 의미하는 HTTP 헤더 :
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
- https://datatracker.ietf.org/doc/html/rfc7233
Ubuntu 23.10, 컬 8.2.1에서 테스트되었습니다.
답변4
나는 원래 질문이 무엇을 의미하는지 알고 있으며 대답은 다음과 같습니다.아니요 wget -c ...
시나리오는 다음과 같이 설명할 수 있습니다.
# Start mirroring a site
wget -m http://...
# 400MB later wget died or interrupted,
# don't know where it left off, don't care,
# just want to get the remaining 100MB without getting the first 400MB again
wget -nc -r -l inf --no-remove-listing http://...
"-r -l inf --no-remove-listing" 옵션은 -N 매개변수가 없는 -m과 동일합니다. 이미 하드 드라이브에 있는 첫 번째 400MB를 저장하지 않으려면 -nc 매개변수를 추가하세요.