Usando cURL para baixar arquivos remotos da linha de comando
Índice:
- Baixar arquivos de correspondência exata com curl -O
- Salvando um arquivo remoto com um nome diferente com curl -o
- Baixando vários arquivos simultaneamente com o curl
A poderosa ferramenta de linha de comando curl pode ser usada para baixar arquivos de praticamente qualquer servidor remoto. Os usuários de linha de comando de longa data sabem que isso pode ser útil para uma ampla variedade de situações, mas para manter as coisas simples, muitos descobrirão que baixar um arquivo com curl pode ser uma alternativa mais rápida do que usar um navegador da Web ou cliente FTP do lado da GUI do Mac OS X (ou Linux).Isso é útil para situações locais, mas há um valor especial se você estiver em uma situação em que precisa baixar algo para um Mac remoto quando conectado por SSH.
Para os fins deste passo a passo, vamos nos concentrar principalmente no download de arquivos dos dois protocolos HTTP e SFTP comumente encontrados, embora deva ser observado que o cURL oferece suporte a muitos outros protocolos. Embora o curl seja fácil de usar, é recomendável ter algum conhecimento da linha de comando.
Baixar arquivos de correspondência exata com curl -O
Usar o sinalizador -O maiúsculo com curl baixa o arquivo do servidor remoto enquanto mantém o nome exato do arquivo, a sintaxe básica para isso é a seguinte:
curl -O
Isso significa que, se o arquivo de URL especificado for denominado “sample.zip”, ele será baixado com o nome de arquivo “sample.zip” e, se o nome do arquivo for enorme e complicado, como “LongExampleFileNameForOSXDaily-v- 1-3-51-revision-515b12-readme.txt” no servidor remoto, ele será salvo com esse nome exato na máquina local. Nomes de arquivo mais longos geralmente são melhor tratados com o sinalizador -o em vez de -O, que abordaremos em breve.
Leitores regulares podem se lembrar de que usamos o comando curl -O ao explicar como extrair o conteúdo de áudio real de um arquivo de streaming m3u.
Iniciar qualquer download com curl mostra a porcentagem transferida, o tempo gasto no download, o tempo restante e a velocidade de transferência.
A captura de tela oferece uma representação melhor do que o exemplo colado abaixo, mas é mais ou menos assim:
% Total % Recebido % Xferd Velocidade Média Tempo Tempo Tempo Atual Dload Upload Total Gasto Velocidade Esquerda 100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k
Com a exibição da velocidade de transferência, você pode redirecionar a saída do curl para /dev/null e usá-lo para testar a velocidade da conexão com a Internet, mas o comando wget tem uma barra de transferência mais fácil de ler e seguir, portanto, o wget é melhor adequado para essa tarefa.
Salvando um arquivo remoto com um nome diferente com curl -o
O uso de um sinalizador -o em minúscula permitirá que você especifique um nome de arquivo diferente para o arquivo baixado do que como ele é nomeado no servidor remoto. Isso pode ser útil para reduzir nomes de arquivo longos ou apenas rotular algo para que seja mais fácil de encontrar por conta própria. A sintaxe geral seria:
curl -o
Por exemplo, se você quiser salvar um arquivo iOS IPSW que encontrou listado nos servidores da Apple sem ter o nome completo longo, você pode usar o seguinte:
curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5, 3_7.0.4_11B554a_Restore.ipsw
Isso fará o download do arquivo “iPhone5, 3_7.0.4_11B554a_Restore.ipsw”, mas com um nome mais curto como o mais significativo “iPhone5C-704.ipsw”.
Se preferir não salvar o arquivo no diretório de trabalho atual, especifique um caminho como parte do nome do arquivo da seguinte forma:
curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg
Baixando vários arquivos simultaneamente com o curl
cURL pode facilmente baixar vários arquivos ao mesmo tempo, tudo que você precisa fazer é especificar mais de um URL como:
curl -O
Para arquivos com nomes diferentes, ou hospedados em servidores diferentes, ou em caminhos de diretórios diferentes, use a URL completa, por exemplo:
curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/ Licenses/lgpl-2.1.txt http://ftp.gnu.org/gnu/GNUinfo/Audio/index.txt
Por outro lado, se os nomes dos arquivos a serem baixados estiverem usando nomenclatura incremental, você pode usar colchetes para especificar um intervalo de download, assim:
curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1.txt
Isso pegaria os arquivos fdl-1.1.txt, fd1-1.2.txt e fd1-1.3.txt ao mesmo tempo sem precisar especificar cada URL exclusivo. Claro que isso só funciona se os arquivos estiverem juntos no mesmo diretório e no mesmo domínio.
Autenticando com curl
Você também pode passar autenticação com cURL usando o sinalizador -u:
curl -u user:pass -O ftp://remote_url/file-to-download.zip
Lembre-se de que o histórico do bash armazenará a senha em texto simples ao usar -u com um nome de usuário e senha especificados, portanto, isso não é recomendado para a maioria das situações. Você pode contornar isso colocando um espaço na frente de 'curl'.Se você não usar a barra de espaço para prefixar o comando, provavelmente desejará esvaziar o histórico de comandos posteriormente por segurança.
Protocolos curl suportados e uso além de HTTP e FTP
Como mencionado anteriormente, o uso de cURL vai muito além de HTTP e FTP, pois a entrada da página do manual do curl menciona protocolos adicionais na descrição:
Além disso, você descobrirá que o curl também pode ser usado para solicitações PUT e POST, cookies, proxies, túneis, retomar downloads e até obter informações de cabeçalho HTTP ou alterar um agente do usuário (falsificação efetiva) sem a necessidade de usar um navegador da web dedicado.
Como a maioria dos utilitários de linha de comando, você pode aprender muito mais sobre curl chamando a página de manual apropriada com o comando 'man curl'.