How to Download Files Using curl in Mac Terminal: A Step-by-Step Guide
Master downloading files with curl in Mac Terminal using step-by-step commands for basic downloads, authentication, and resuming interrupted transfers.
When you need to quickly download files without leaving the Mac Terminal, knowing the right commands can save you time and hassle. Whether you're grabbing a simple file or managing downloads that require authentication or resuming after interruption, mastering curl is key.
This guide explains how to download files with curl in Mac Terminal, covering everything from basic commands to more advanced options like specifying save locations, handling authentication, and troubleshooting common issues. You'll learn practical steps tailored specifically for Mac users to make your download process reliable and efficient.
Key takeaways
- Use curl -O [URL] to download files with the original name to the current directory.
- Specify a custom filename and path with curl -o /path/filename [URL].
- Handle authenticated downloads using curl -u username:password [URL] or custom headers.
- Resume interrupted downloads with curl -C - [URL] and monitor progress using --progress-bar.
- Common issues include permission errors and SSL certificate problems, which can be resolved via Terminal permissions and curl options.
Before you start: What you need to use curl in Mac Terminal
curl is pre-installed on most macOS versions, typically located at /usr/bin/curl. To confirm curl is available on your system, open Terminal and check its version and path. You need basic familiarity with Terminal, which you can find in the Utilities folder within Applications. Ensure you have an active internet connection and a valid URL for the file you intend to download.
- Open Terminal from Applications > Utilities.
- Type
which curland press Enter. You should see a path like/usr/bin/curl. - Type
curl --versionand press Enter. You will see curl’s version information and supported protocols. - Verify your internet connection is active by pinging a website with
ping -c 3 example.com. Successful replies indicate connectivity.
Note that macOS versions from Yosemite onward include curl by default. If curl is missing or outdated, you can install or update it using Homebrew or other package managers, but for most users, the built-in curl is sufficient.
Basic command to download a file with curl
Using curl to download a file in Mac Terminal is straightforward. The basic syntax involves the curl command followed by the URL of the file you want to download.
- Open Terminal on your Mac.
- Type
curl -O https://example.com/samplefile.txtand press Enter. Replace the URL with the actual address of the file. - curl will start downloading the file and save it with its original filename (
samplefile.txtin this example). - Check your current directory by typing
ls. You should see the downloaded file listed there.
The -O (uppercase o) option tells curl to save the file using the remote file's name. Without this option, curl outputs the file content to the Terminal window instead of saving it. By default, the file is saved in the directory where you ran the curl command, usually your home directory or wherever your Terminal prompt is currently pointed.
Saving files with a custom name and location
When downloading files with curl, controlling the saved file’s name and destination folder is essential for organization. The -o flag lets you specify a custom filename and path, while -O saves the file with its original name in the current directory.

To save a file with a new name or to a specific folder, use curl -o /path/to/destination/filename URL. You can use either a full path (e.g., /Users/yourname/Downloads/newfile.zip) or a relative path (e.g., ./Desktop/customname.txt).
Be cautious to avoid overwriting existing files. If a file with the same name exists at the target location, curl will overwrite it without warning. To prevent this, check the directory contents beforehand using ls or choose a unique filename.
- Open Terminal and run
curl -O https://example.com/file.zip. You should seefile.zipsaved in your current directory. - Run
curl -o ~/Downloads/myfile.zip https://example.com/file.zip. Check your Downloads folder;myfile.zipshould appear with the downloaded content. - Try
curl -o./Desktop/custom_name.txt https://example.com/data.txt. The filecustom_name.txtshould be on your Desktop. - If you want to verify, list the directory with
ls ~/Downloadsorls ~/Desktopto confirm the files are present under the specified names.
Downloading files with authentication and headers
Many websites, such as private repositories or APIs, require authentication before allowing file downloads. Curl supports basic HTTP authentication with the -u option, where you provide your username and password in the format username:password. For example:
curl -u user123:pass456 -O https://example.com/private/file.zip
If your credentials are correct, curl downloads the file as usual. If not, you may see an error like 401 Unauthorized, indicating authentication failed.
For more complex requests, such as APIs requiring tokens or custom headers, use the -H flag to add headers. For instance, to send an API token:
curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json
Be aware that including credentials directly in the command line can expose them to other users on the system or in shell history. To reduce this risk, consider using environment variables or prompt methods to input sensitive data securely.
- Enter the curl command with
-u username:passwordor-Hfor headers, targeting the file URL.
Expected: File downloads successfully without permission errors. - If you see 401 Unauthorized or similar, verify your credentials and try again.
Expected: Error persists until correct credentials are used. - To protect credentials, avoid typing them directly by using environment variables or curl's prompt for passwords.
Expected: Credentials are not visible in shell history or process lists.
Resuming interrupted downloads and showing progress
When downloading large files, interruptions can waste time and bandwidth. Curl’s -C - option allows you to resume a partial download from where it left off, reducing the need to start over.

- Run the initial download:
curl -O http://example.com/largefile.zip. You should see curl’s default progress meter showing percentage, download speed, and estimated time. - If the download stops, resume it with:
curl -C - -O http://example.com/largefile.zip. Curl will continue from the last byte saved. Successful resumption is indicated by the progress meter starting above zero. - To view a simpler, cleaner progress bar, add
--progress-barlike this:curl -C - --progress-bar -O http://example.com/largefile.zip. This replaces the default curl meter with a more readable bar.
Note that some servers do not support resuming downloads, so -C - might fail or download the file from the beginning again. In such cases, consider using a dedicated download manager like aria2 for more robust resumption features.
If curl’s progress output is insufficient, you can redirect it to a file for later review or combine curl with other tools to monitor bandwidth and speed in more detail.
Troubleshooting common curl download issues on Mac
When using curl in Mac Terminal, several errors can disrupt your download process. Here are common issues and how to resolve them.
SSL certificate errors
If you see errors like "SSL certificate problem: unable to get local issuer certificate", it usually means curl cannot verify the server's SSL certificate.
- Try adding --insecure to your command to bypass certificate verification.
- If it works, consider updating your system's CA certificates or specifying a custom certificate bundle with --cacert.
HTTP 404 or 403 errors
A 404 Not Found means the URL is incorrect or the file is missing, while 403 Forbidden indicates permission issues on the server.
- Double-check the URL spelling and availability in a browser.
- For 403 errors, verify if authentication is required or if IP restrictions apply.
Permission denied errors when saving files
Errors like "Permission denied" occur when curl cannot write to the target directory.
- Use ls -ld [directory] to check write permissions.
- Save the file to a directory where you have write access, such as your home folder, or run curl with sudo if necessary, understanding the security implications.
Network connectivity problems and timeouts
Timeouts or connection refused errors may indicate network issues.
- Check your internet connection and firewall settings.
- Use curl --connect-timeout 30 [URL] to increase the timeout period.
- If the problem persists, test the URL on another device or network to isolate the issue.
- How to Keep Your Mac Awake Using the Terminal’s Caffeinate Command
- How to See Wi-Fi Password in Mac Terminal: A Clear Step-by-Step Guide
- How to List Installed Apps in Mac Terminal: A Step-by-Step Guide
Frequently asked questions
Can I use curl to download multiple files at once in Mac Terminal?
curl does not natively support downloading multiple files simultaneously with a single command. However, you can use a shell loop or list multiple URLs with separate curl commands to download files sequentially. For parallel downloads, combining curl with tools like xargs or GNU Parallel is common, but these require additional setup beyond basic curl usage.
How do I verify the integrity of a downloaded file using curl?
curl itself does not verify file integrity after download. To ensure your file is intact, you typically use checksum tools like shasum or md5 on Mac to compare the file’s hash against a known value provided by the source. This process confirms the file hasn't been corrupted or tampered with during transfer.
Is there a way to limit download speed with curl on Mac?
Yes, curl supports limiting download speed using the --limit-rate option followed by a rate like 100K for 100 kilobytes per second. This is useful to prevent curl from consuming all your bandwidth, especially on slower or shared connections.
How can I use curl to download files behind a proxy server?
You can configure curl to use a proxy by adding the --proxy option followed by the proxy address, for example, --proxy http://proxy.example.com:8080. If the proxy requires authentication, include your username and password in the URL like http://username:[email protected]:8080. This lets curl route requests correctly when you're behind a proxy.
What this guide does not cover and who should look elsewhere
This guide does not cover advanced scripting or automation with curl beyond basic command-line usage, nor does it address downloading files through complex authentication methods like OAuth or multi-factor authentication. If your needs include integrating curl commands into larger scripts or managing downloads requiring token-based authentication, consider consulting specialized resources or developer documentation tailored to those scenarios. Additionally, users seeking GUI-based download management might find dedicated applications more suitable.
For most users, the single most useful next step is to practice these commands with different URLs and options in your Mac Terminal to become comfortable with customizing downloads. Experiment with saving files to specific directories and using authentication flags where necessary. This hands-on approach will help you quickly identify the best curl options for your typical download tasks and troubleshoot issues as they arise.