Preveja o nome do arquivo antes de fazer o download de uma URL, no shell script

2

Eu tenho um script de shell que baixa arquivos de uma lista usando wget e continua automaticamente se houver algum erro não crítico (por causa do WIFI instável durante tempestades).

O problema é que eu quero gravar em um arquivo filename.part e, em seguida, remover a extensão .part, uma vez concluída (sobrescrever e tal é tratado nesse ponto). Isso funciona para URLs simples como http://myserver.org/myfile.doc , mas não consegue adivinhar um nome de arquivo como http://myserver.org/index.php?file_id=foo . (meu método tentaria gravar em index.php.part em vez do resultado desejado)

Eu posso ter o wget para obter o nome do arquivo "final" automaticamente e gravar nele, mas isso não me permite usar a opção -O para salvar com uma extensão diferente, ele não deixa controle.

Então, minha pergunta é: existe alguma maneira padrão (ou ferramenta) de obter o nome do arquivo "final" em um URL de download para que eu possa gravar em um arquivo com o mesmo nome, mas com uma extensão adicional? (usando -O no wget ou -o no curl, como wget $URL -O "$URL_GUESSED_FILENAME.part" )

Minhas ferramentas são wget ou curl, sem preferência, mesmo que eu use atualmente o wget. Como alternativa, se houver uma maneira de fazer isso no Python, também posso aceitar isso.

    
por magnamouse 17.09.2012 / 07:05

1 resposta

1

O Wget pode armazenar http://myserver.org/index.php?file_id=foo em um nome de arquivo fornecido pelo servidor, por exemplo %código%. Geralmente isso requer a opção wget foo.ext . Se você deseja fazer o download para --content-disposition , é necessário descobrir primeiro. Isso pode ser feito baixando o cabeçalho http primeiro, ele conterá o nome do arquivo.

Com wget você pode obter a linha de cabeçalho correspondente com um comando como este:

wget --spider --server-response URL 2>&1 | grep -i content-disposition

Você precisa de uma análise trivial no cabeçalho para extrair o nome do arquivo. É opcional, claro. Se não estiver presente, você estará sem sorte e o wget criará um nome de arquivo baseado em -O foo.ext.part . Pode também usar isso para index.php então.

    
por 29.12.2012 / 23:48