Grava a saída do wget ou curl em um nome de arquivo personalizado com base no URL


12

Por exemplo, eu tenho um link http://www.abc.com/123/def/ghi/jkl.mno. Quero fazer o download usando wgetor curle obter o nome do arquivo de saída como def_ghi_jkl.mno, onde a parte def_ghié retirada do link.

Vou colocar esse wgetcomando em um script para baixar vários arquivos, para que ele não possa fornecer explicitamente o nome do arquivo de saída.

Respostas:


15

curlpossui a opção -o, --outputque usa um único argumento indicando que a saída do nome do arquivo deve ser gravada em vez de stdout. Se você estiver usando {}ou []para cercar elementos na URL (geralmente usada para buscar vários documentos), poderá usar #seguido de um número no especificador de nome de arquivo. Cada variável desse tipo será substituída pela sequência correspondente ao URL que está sendo buscado. Para buscar vários arquivos, adicione uma lista separada por vírgula de tokens dentro do {}. Se partes dos URLs a serem buscados forem números sequenciais, você poderá especificar um intervalo com [].

Exemplos:

  curl http://www.abc.com/123/{def}/{ghi}/{jkl}.mno -o '#1_#2_#3.mno'

Observe as aspas ao redor do argumento da opção (não é necessário, a menos que o nome do arquivo comece com uma das variáveis ​​expandidas). Isso deve resultar no arquivo de saída def_ghi_jkl.mno.

  curl http://www.abc.com/123/{def}/{ghi}/{jkl,pqr,stu}.mno -o '#1_#2_#3.mno'

Isso deve resultar em arquivos de saída def_ghi_jkl.mno, def_ghi_pqr.mnoe def_ghi_stu.mno.

 curl http://www.abc.com/123/{def}/{ghi}/[1-3].mno -o '#1_#2_#3.mno'

Isso deve resultar em arquivos de saída def_ghi_1.mno, def_ghi_2.mno, def_ghi_3.mno.


2

wgetpossui uma opção -O(formato longo --output-document) que permite especificar o nome do arquivo para salvar. (Presumivelmente, a curvatura tem algo semelhante.) Então você pode fazer:

wget -O def_ghi_jkl.mno http://www.abc.com/123/def/ghi/jkl.mno

e fará o que você quiser.

Você provavelmente poderia criar um wrapper para o wget se quiser automatizar esse esquema de nomenclatura, mas seria muito difícil obter provas de bala e está definitivamente fora do escopo desta resposta. (O simples caso de um único arquivo baixado de um URL explícito não deve ser muito difícil de corrigir, mas esse não é o único modo de operação do wget. Para citar apenas um caso que torna isso um pouco trivial, você pode especificar vários URLs na linha de comando.)

Observe que -Onão é o mesmo que -o, que é a própria saída do wget para o arquivo nomeado.


É parte de um script, dando um nome de arquivo explícito como esse não funcionará.
precisa saber é

@ user47567 Por que não? E o fato de o wget ou curl ser chamado de um script torna isso impraticável? (E realmente, se você tem tais restrições sobre o que respostas vão trabalhar, essa informação deve realmente entrar na questão desde o início.)
um CVn

0

Aqui está um truque de substituição do Bash

link="http://www.abc.com/123/def/ghi/jkl.mno"
OutputFile=$( echo ${link:23: 23}| tr "/" "_" )
echo $OutputFile
def_ghi_jkl.mno

{$link:23: 23}removerá " http://www.abc.com/123/ " ${parameter:offset:length}, e trsubstituirá /para _.

Então agora você pode usar facilmente com wget ou curl

wget $link  -O $OutputFile

Também podemos usar o awk, isso extrairá os três últimos arquivados da string de entrada:

OutputFile=$( echo $link | awk -F/ 'BEGIN{OFS="_"}{ print $( NF-2),$(NF - 1 ),$NF}' )

0

O nome do arquivo que você precisa não pode ser derivado por wgetsi só; portanto, ele precisa ser manuseado por um script de shell:

$ url='http://www.example.com/123/def/ghi/jkl.mno'
$ outFile=$(echo "$url" | cut -d /  -f 5- | tr / _)
$ echo $outFile 
def_ghi_jkl.mno
$ wget "$url" -O "$outFile"

Ou se você gosta de uma linha:

wget "$url" -O "$(echo "$url" | cut -d /  -f 5- | tr / _)"

0

Se você preferir enrolar, a maneira mais direta é:

curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"

filename: o nome do arquivo baixado

ID do arquivo: o ID do arquivo na visualização da web do Google Drive no formato https://drive.google.com/file/d/ ID / visualização do arquivo

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.