Como baixar arquivos com curl
curl é uma das ferramentas de linha de comando mais versáteis para baixar arquivos via HTTP, HTTPS, FTP e dezenas de outros protocolos. Seja para salvar uma única resposta de API em um arquivo ou automatizar downloads em lote em um script shell, o curl tem uma flag para isso. Este guia cobre todas as opções relacionadas a download — desde o salvamento básico de arquivos com -o e -O até a retomada de transferências interrompidas com -C -, limitação de largura de banda com --limit-rate e exibição de barras de progresso. Cada flag inclui uma explicação clara, padrões de uso comuns e um exemplo pronto para copiar.
Referência rápida de flags de download
Gravar saída em um arquivo nomeado em vez de stdout
Gravar saída em um arquivo com o mesmo nome do arquivo remoto
Seguir redirecionamentos HTTP 3xx automaticamente
Continuar/retomar uma transferência de arquivo anterior
Limitar a velocidade de transferência à taxa especificada
Recusar o download de arquivos maiores que o tamanho especificado
Usar o header Content-Disposition para nomear o arquivo
Exibir progresso da transferência como uma barra de progresso simples
Fornecer usuário:senha para autenticação no servidor
Tentar novamente a transferência em erros transitórios (número de vezes)
Esperar este número de segundos entre tentativas
Enviar um arquivo local para uma URL (PUT por padrão)
Criar diretórios locais conforme necessário ao salvar a saída
Suprimir medidor de progresso e mensagens de erro
Salvar arquivo(s) de saída no diretório especificado (curl 7.73+)
curl -o: Salvar com um nome de arquivo específico
- O que faz
- A flag
-o(ou--output) instrui o curl a salvar o corpo da resposta em um arquivo que você especifica. Sem ela, o curl imprime a resposta no stdout (seu terminal). Você pode usar qualquer nome de arquivo e caminho — o curl criará o arquivo ou sobrescreverá um existente. - Uso comum
- Use
-oquando precisar controlar o nome exato do arquivo ou salvar em um diretório específico. Funciona com qualquer protocolo — HTTP, HTTPS, FTP, SFTP e mais. Combine com-Lpara lidar com redirecionamentos e-spara operação silenciosa em scripts.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Salvar com o nome do arquivo remoto
- O que faz
- A flag
-O(ou--remote-name) salva o arquivo baixado usando o nome extraído da URL. Por exemplo, se a URL termina com/data.csv, o curl cria um arquivo chamadodata.csvno diretório atual. - Uso comum
- Use
-Oquando o nome do arquivo remoto é significativo e você não precisa renomeá-lo. Você pode passar múltiplas flags-Opara baixar vários arquivos em um único comando. Nota: se a URL não contém um nome de arquivo (ex: termina com/), o curl falhará — use-oem vez disso.
$ curl -O https://example.com/files/data.csvcurl -L: Seguir redirecionamentos
- O que faz
- A flag
-L(ou--location) faz o curl seguir automaticamente redirecionamentos HTTP — 301 (Movido Permanentemente), 302 (Encontrado), 307 e 308. Sem-L, o curl retorna a resposta de redirecionamento em si, em vez do conteúdo real. - Uso comum
- A maioria das URLs de download redireciona pelo menos uma vez (ex: de HTTP para HTTPS, ou de uma URL curta para o arquivo real). Sempre combine
-Lcom-oou-Oao baixar arquivos. Por padrão, o curl segue até 50 redirecionamentos; altere com--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Retomar downloads interrompidos
- O que faz
- A flag
-C -(ou--continue-at -) instrui o curl a detectar automaticamente o tamanho do arquivo parcial existente e retomar o download de onde parou. O servidor deve suportar o header HTTPRangepara isso funcionar. - Uso comum
- Se um download grande foi interrompido por um problema de rede ou timeout, simplesmente execute o mesmo comando novamente com
-C -adicionado. O curl enviará um headerRange: bytes=OFFSET-e baixará apenas os dados restantes. Isso é essencial para arquivos grandes em conexões instáveis.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Limitar velocidade de download
- O que faz
- A flag
--limit-ratelimita a velocidade de download (e upload) à taxa especificada. Aceita sufixos:kouKpara kilobytes/s,mouMpara megabytes/s,gouGpara gigabytes/s. - Uso comum
- Use
--limit-ratepara evitar saturar sua largura de banda ao baixar arquivos grandes, especialmente em conexões compartilhadas. Também é útil para testar como sua aplicação lida com respostas lentas.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Abortar se o arquivo for muito grande
- O que faz
- A flag
--max-filesizeinstrui o curl a abortar a transferência se o tamanho esperado do arquivo (do headerContent-Length) exceder o limite especificado. O tamanho pode usar sufixos comok,M,G. - Uso comum
- Use em scripts para evitar que downloads inesperadamente grandes consumam espaço em disco. Note que nem todos os servidores enviam
Content-Length— nesse caso, o curl não pode aplicar este limite e o download prossegue normalmente.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Usar nome de arquivo sugerido pelo servidor
- O que faz
- A flag
-J(ou--remote-header-name) instrui o curl a usar o nome de arquivo especificado no headerContent-Dispositiondo servidor, em vez de extraí-lo da URL. Isso é comum em APIs de download que retornam arquivos com nomes significativos. - Uso comum
- Sempre combine
-Jcom-O. Isso é útil quando a URL é um endpoint de API (como/export?format=csv) mas o servidor retorna um nome de arquivo adequado nos headers. Nota de segurança: o servidor controla o nome do arquivo, então use apenas com servidores confiáveis.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Mostrar barra de progresso
- O que faz
- A flag
-#(ou--progress-bar) substitui o medidor de progresso detalhado padrão por uma barra de progresso simples###. É mais fácil de ler para uso interativo. - Uso comum
- Use
-#ao baixar interativamente quando quiser um indicador de progresso limpo. Para scripts, prefira-s(silencioso) ou o medidor de progresso padrão. A saída padrão do curl já mostra velocidade, porcentagem, tempo restante e tamanho total.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzOpções adicionais de download
Fornecer usuário:senha para autenticação no servidor
Tentar novamente a transferência em erros transitórios (número de vezes)
Esperar este número de segundos entre tentativas
Enviar um arquivo local para uma URL (PUT por padrão)
Criar diretórios locais conforme necessário ao salvar a saída
Suprimir medidor de progresso e mensagens de erro
Salvar arquivo(s) de saída no diretório especificado (curl 7.73+)
Cenários reais de download
Estes exemplos combinam múltiplas flags para lidar com tarefas comuns de download que você encontrará no desenvolvimento e scripting do dia a dia.
Baixar múltiplos arquivos de uma vez
Use múltiplas flags -O para baixar vários arquivos em um único comando. O curl os processa sequencialmente. Para downloads paralelos, use xargs ou GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtBaixar de um servidor FTP
O curl suporta FTP, FTPS e SFTP nativamente. Adicione -u user:password para acesso autenticado. Use -O para manter o nome do arquivo remoto.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlDownload com autenticação
Use -u user:pass para Basic Auth, ou -H para passar um token Bearer ou chave de API. Combine com -L e -o para um download completo.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportDownload confiável com retomada e novas tentativas
Combine -C - (retomar), --retry (nova tentativa automática em caso de falha) e -L (seguir redirecionamentos) para downloads robustos que sobrevivem a interrupções de rede.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipPerguntas frequentes sobre download com curl
Qual a diferença entre curl -o e curl -O?
-o nomedoarquivo salva o download com o nome exato que você especifica. -O extrai o nome do arquivo da URL e usa esse. Use -o quando quiser um nome ou caminho personalizado; use -O quando o nome do arquivo remoto for adequado.
Por que o curl baixa um arquivo vazio ou HTML em vez do arquivo real?
A URL provavelmente retorna um redirecionamento HTTP (301 ou 302). Por padrão, o curl salva a resposta de redirecionamento em si — não o conteúdo final. Adicione -L para seguir redirecionamentos automaticamente: curl -L -o arquivo URL.
Como retomar um arquivo parcialmente baixado com curl?
Use curl -C - -o nomedoarquivo URL. A flag -C - detecta o tamanho do arquivo existente e envia um header Range para solicitar apenas os bytes restantes. O servidor deve suportar requisições de range para isso funcionar.
Como limitar a velocidade de download no curl?
Use --limit-rate com um valor e sufixo: curl --limit-rate 500k -o arquivo URL limita a velocidade a 500 KB/s. Sufixos: k (KB/s), M (MB/s), G (GB/s).
O curl pode baixar múltiplos arquivos de uma vez?
Sim. Use múltiplas flags -O: curl -O URL1 -O URL2 -O URL3. O curl baixa sequencialmente. Para downloads paralelos, encaminhe uma lista de URLs para xargs -P 4 -I {} curl -O {}.
Como baixar um arquivo que requer autenticação?
Para HTTP Basic Auth: curl -u user:pass -o arquivo URL. Para tokens Bearer: curl -H "Authorization: Bearer TOKEN" -o arquivo URL. Para chaves de API em headers: curl -H "X-API-Key: KEY" -o arquivo URL.
Como baixar arquivos de um servidor FTP com curl?
Use curl -u user:pass -o arquivolocal ftp://host/caminho/arquivo. O curl suporta FTP, FTPS (FTP sobre TLS) e SFTP (SSH FTP) nativamente. Para FTP anônimo, omita -u.
Como baixar arquivos grandes de forma confiável com curl?
Combine -C - (retomar em caso de falha), --retry 5 (nova tentativa automática), --retry-delay 10 e -L (seguir redirecionamentos): curl -C - --retry 5 --retry-delay 10 -L -o arquivo URL. Isso lida automaticamente com problemas de rede.
Como mostrar uma barra de progresso ao baixar com curl?
Use curl -# -o arquivo URL para uma barra de progresso simples. A saída padrão do curl já mostra velocidade de transferência, porcentagem e tempo estimado. Para scripts, use -s para suprimir toda a saída.
Posso especificar um diretório de download no curl?
Com curl 7.73+, use --output-dir /caminho/para/diretorio combinado com -O. Para versões mais antigas, especifique o caminho completo com -o /caminho/para/diretorio/nomedoarquivo. Adicione --create-dirs se o diretório ainda não existir.
Devo usar curl ou wget para baixar arquivos?
Ambos são excelentes. wget é mais simples para espelhamento recursivo de sites e tem lógica de nova tentativa integrada. curl suporta mais de 25 protocolos (não apenas HTTP/FTP), é melhor para chamadas de API e scripting, suporta mais métodos de autenticação e está disponível em praticamente todos os sistemas operacionais.
Como usar curl em um script bash para baixar arquivos?
Use curl -fsSL -o arquivo URL: -f falha silenciosamente em erros HTTP (nenhuma página de erro salva), -s silencioso, -S mostra erros mesmo em modo silencioso, -L segue redirecionamentos. Verifique o código de saída: if ! curl -fsSL -o arquivo URL; then echo "Download falhou"; exit 1; fi.