How to download files with Curl

The simplest format for curl is:

curl -O [URL]

That’s a capital “O” (Oh)


curl -O


will download the file from remote and store it in the same name in the current location.


Resuming a Broken download with curl:

curl -C - -O android-ndk-r8c-linux-x86.tar.bz2

will resume downloading from to the local file android-ndk-r8c-linux-x86.tar.bz2

Note that that is a capital C and a small O (Oh)

Now here’s an interesting observation. Wget and curl can resume download of a download started by the other too!

How to download files with Wget

The basic syntax for downloading a file with wget is:

wget [URL]




Resuming a Broken download with wget:

wget -c[/code]
will resume the download into the same filename received from server, i.e, and will not overwrite it.

Specify a destination directory with wget:

This is done with the -P option. Eg: Getting a specific patch from Github
[email protected]:~/Note2Core-GT-N710x_Kernel$ wget -P ../patches/
--2012-11-27 22:21:17--
Connecting to||:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1177 (1.1K) 
Saving to: `../patches/2c305d77b1ebd8a45242312ae693764de11630a9.patch'

100%[============================================================================================================================>] 1,177       --.-K/s   in 0s      

2012-11-27 22:21:18 (461 MB/s) - `../patches/2c305d77b1ebd8a45242312ae693764de11630a9.patch' saved [1177/1177]

Download using proper file name from server

Often, while using curl or wget to download files with urls like, you will find that it actually downloads file with a filename like 7u9-b05/jdk-7u9-linux-i586.tar.gz?AuthParam=1354451808_536b13c3c7c8eb652e674f6f7c23467b. Frankly it's a chore to rename it back to the correct filename jdk-7u9-linux-i586.tar.gz and wreaks havoc with any sort of automation you had in mind.

So it turns out that both wget and curl have experimental options to resolve the correct filename from server.

If we want to use curl to get a file with proper filename and also resume it if the file already exists, and get the proper filename from server we might do something like:

curl -C - -O -J

Here, -C is the flag to "Continue (resume) a file download if a partial file already exists"

-O specifies the output is to a file rather than stdout

-J makes sure that filename is resolved properly


The corresponding option for wget is to use the --content-disposition flag.

So our command would be:

wget --content-disposition -c