An interrupted transfer can leave most of a large file already on disk. wget -c resumes that partial download from its last saved byte when the server supports range requests, and a trusted checksum then proves the finished file is intact.

GNU wget resumes with -c or --continue by using the local file size as the offset of a range request, so the server sends only the remaining bytes. Current GNU documentation also notes that -c is only for a partial file left by an earlier run, because a single wget invocation already retries a dropped connection during the current transfer.

Resume is only safe when the local file still matches the start of the remote file, because wget never compares the bytes already on disk.

Steps to resume an interrupted download with wget:

  1. Change to the directory that holds the partial file.
    $ cd ~/downloads/releases

    wget -c looks for a file with the URL's filename in the current directory, so a renamed or moved partial file starts a new download. If the original command used -O, keep the same -O filename in the resume command.

  2. Resume the download with -c and the original URL.
    $ wget -c https://downloads.example.net/releases/release-bundle.tar.gz
    --2026-11-06 01:34:02--  https://downloads.example.net/releases/release-bundle.tar.gz
    Resolving downloads.example.net (downloads.example.net)... 203.0.113.50
    Connecting to downloads.example.net (downloads.example.net)|203.0.113.50|:443... connected.
    HTTP request sent, awaiting response... 206 Partial Content
    Length: 24003926 (23M), 13747796 (13M) remaining [application/gzip]
    Saving to: 'release-bundle.tar.gz'
    
    ##### snipped #####
    2026-11-06 01:34:07 (2.91 MB/s) - 'release-bundle.tar.gz' saved [24003926/24003926]

    206 Partial Content and the remaining figure show that only the missing bytes were sent. A 200 OK response means the server ignored the resume request and resent the whole file, and wget still keeps the bytes on disk and adds only the rest. The message The file is already fully retrieved; nothing to do. means the local file is at least as long as the remote one.

    If the file on the server changed after the interruption, delete the partial file and download it again, because resuming would join old and new bytes.

  3. Download the checksum file from the publisher's release page.
    $ wget https://downloads.example.net/releases/release-bundle.tar.gz.sha256
    ##### snipped #####
    2026-11-06 01:34:08 (287 MB/s) - 'release-bundle.tar.gz.sha256' saved [88/88]

    Checksum filenames vary, and names such as SHA256SUMS are common, so copy the link the publisher gives. Without a published checksum, the finished size is all you can compare, and it does not prove the contents.

  4. Verify the completed file against the publisher's checksum.
    $ sha256sum --check release-bundle.tar.gz.sha256
    release-bundle.tar.gz: OK

    OK means the file matches the published checksum, so the old and new bytes joined correctly. If the checksum list also names files you did not download, add --ignore-missing so they are skipped.

    A FAILED result means the file holds the wrong bytes and must not be used, so delete it and download it again.

Share this guide