Choosing a tool
- curl: script-friendly, great for single files, broad protocol support. Fits one-command downloads and ships with nearly every system
- wget: strong recursive download and mirroring, simple resume flags. Fits directory structures and offline mirrors
- aria2: multi-connection segmented downloads, batch queues, resume. Fits large files and many-file jobs
Rule of thumb: curl for a quick single download, wget for mirroring, aria2 for speeding up large files. All three support resume; see below for flags.
Quick parameter reference
curl -L -O follow redirects, save with the remote filename curl -C - -fL --retry 3 -o F resume, retry 3 times, save as F wget -c -t 3 --timeout=30 resume, 3 retries, 30s timeout wget -i urls.txt -P dir/ batch download from a list into dir/ aria2c -c -x8 -s8 -k 1M resume, 8 connections, 8 segments, 1MB chunks
In practice: downloading a Release asset
Using the accelerated address, a robust command combines redirect following, resume, retries and timeouts:
curl -C - -fL --retry 3 --retry-delay 2 --timeout 60 \ -o app-v1.0.zip \ "https://ghclone.com/https://github.com/owner/repo/releases/download/v1.0/app-v1.0.zip"
After an interruption, run the same command again to continue. Once finished, check the file size and, when the publisher provides hashes, run sha256sum.
Three stability tips
- Control concurrency: more aria2 connections is not always better; under jitter, individual segments can stall for a long time
- Set retries and timeouts: let the tool wait and retry instead of failing fast
- Pin versions: download tag- or commit-addressed files so resume cannot stitch mismatched content
FAQ
- TLS or certificate errors? Usually an environment issue — update the tool or check system time; avoid skipping verification.
- Behind a proxy? curl uses
--proxy, wget readshttps_proxy, aria2 takes--all-proxy. - Downloading many files? wget uses
-iwith a list; aria2 accepts multiple URLs or an input file.