curl -O: Por que não é possível baixar o diretório específico do arquivo? [fechadas]

1

A entrada man curl para curl -O diz:

If you want the file saved in a different directory, make sure you change cur‐ rent working directory before you invoke curl with the -O, --remote-name flag!

Por que não é possível baixar o arquivo para um diretório específico e é preciso fazer cd /example para baixar o arquivo para um diretório específico?

Eu sei que é possível com wget desta maneira:

wget -P /example https://example.com/file

Mas eu me pergunto por que aparentemente não é com curl .

    
por Arcticooling 13.01.2018 / 08:49

2 respostas

6

Isso ocorre porque é como curl é projetado.

Você pode, no entanto, conseguir gravar no diretório de saída por meio do redirecionamento de shell. Exemplo:

$ curl http://example.com/file > /path/to/destination/file
    
por 13.01.2018 / 09:14
7

Why it isn't possible to download the file to a specific directory and one has to do cd /example to download the file to a specific directory?

Porque o curl foi projetado dessa maneira. Como é o software livre , você pode baixar o código-fonte (talvez com git clone https://github.com/curl/curl.git ) e estudá-lo. Você descobrirá que a chamada de sistema chdir (2) nunca é usada nela (aparece apenas nos scripts de teste codificados em Perl).

Se você não quiser explicitamente cd em seu shell antes de usar curl , poderá usar outra coisa ou corrigir o código-fonte curl para adicionar essa opção (por exemplo, você pode melhorar seu código para aceite a opção de programa --chdir dirname e, em seguida, chame o chdir syscall ; minha opinião não vale o esforço). Lembre-se de que cada processo tem seu próprio trabalho de trabalho (herdado de seu processo pai). Veja também credenciais (7) e leia alguns livros de programação do Linux (talvez o antigo, mas livre para download, ALP ; também intro(2) & syscalls (2) )

É claro que você pode usar curl somente com caminhos absolutos (considere usar realpath (1) em seus scripts de shell, ou realpath (3) em seus programas em C , para obter um) ..

Você também pode e muito mais simplesmente agrupar curl em algum script de shell fazendo o que deseja; talvez algum script incurl seja tão simples como:

#!/bin/sh
# this is your incurl shell script
cd "$1"
shift
exec curl "$@"

que você usará, por exemplo com incurl /tmp/ -O foo http://example.com/path/foobar.txt (para obter alguns /tmp/foo desse URL).

Você também pode usar a biblioteca libcurl , talvez de alguma linguagem de script (como Guile , Python , Lua , Perl , etc ...), ou de um programa escrito em uma linguagem implementada por compiladores (Rust, Go, C ++, C, Ocaml, ....). Você pode até encontrar outras bibliotecas cliente HTTP (e também bibliotecas de servidores HTTP).

Por que os criadores de curls não pensaram em mais recursos, sinos e assobios, leia sobre a filosofia Unix . curl é um software de linha de comando que faz uma coisa, mas faz bem. Você vai compor ou embrulhar com outros utilitários (talvez tão simples quanto o script incurl acima) para obter mais recursos. E, infelizmente, curl também não faz o seu café da manhã.

PS. Eu suponho que você esteja usando algum sistema operacional POSIX ou Unix, como Linux, MacOSX, AIX, ...

    
por 13.01.2018 / 09:14