Estou baixando um site com wget e muitos links têm consultas anexadas a eles, então quando faço isso:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Acabo com muitos arquivos como este:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
O que eu gostaria de terminar é:
1.mp3
2.mp3
3.mp3
Tudo isso está ocorrendo no ubuntu linux e eu tenho o wget 1.10.2.
Eu sei que posso fazer isso depois de receber tudo por meio de um script para renomear tudo. No entanto, eu realmente gostaria de uma solução do wget para que eu possa ver os nomes corretos enquanto o download está acontecendo.
Alguém pode me ajudar a desvendar isso?
wget
comandos (se não menos).Respostas:
Se o servidor for gentil, ele pode estar colando um cabeçalho de Disposição de Conteúdo no download, informando seu cliente sobre o nome de arquivo correto. Dizer ao wget para ouvir o cabeçalho do nome do arquivo final é tão simples quanto:
Você precisará de uma versão nova do wget para usar esse recurso.
Não tenho idéia de como ele lida com um servidor reivindicando um nome de arquivo '/ etc / passwd'.
fonte
?v=blah
versão de tipo. Pode haver alguma maneira específica da cloudfront de solicitar um documento sem eles, não sei, mas não encontrei um, portanto, algo como uma das outras respostas pode ser necessário nesse caso. (Se alguém souber uma maneira de tirar asv=
cordas - ou pedir para o Cloudfront não servir - as cordas, eu adoraria ouvir sobre isso.)Percebi, depois de processar um lote grande, que eu deveria ter instruído
wget
a ignorar as cadeias de consulta. Como não queria repetir, criei esse script que funcionou para mim:Coloque isso em um arquivo como
rmqstr
echmod +x rmqstr
sintaxe:./rmqstr <directory (defaults to .)>
Ele removerá as seqüências de consulta de todos os nomes de arquivos recursivamente.
fonte
Eu acho que, para conseguir
wget
salvar como um nome de arquivo diferente do que o URL especifica, você precisa usar o-O filename
argumento Isso só faz o que você deseja quando você fornece um único URL - com vários URLs, todo o conteúdo baixado terminafilename
.Mas essa é realmente a resposta. Em vez de tentar fazer tudo em um
wget
comando, use vários comandos. Agora seu fluxo de trabalho se torna:wget
para obter o (s) arquivo (s) HTML básico que contém seus links;mp3
,http://foo/bar/baz.mp3?gargle=blaster
embaz.mp3
wget <URL> -O <filename>
Isso resolve o seu problema, mas agora você precisa descobrir como pegar os arquivos base para encontrar seus
mp3
URLs.Você tem um URL de site / base específico em mente? Os passos 1 e 3 serão mais fáceis de lidar com um exemplo concreto.
fonte
ESTÁ BEM. Use wget como você faz normalmente; use o script pós-wget que você normalmente usa, mas processe a saída do wget para que fique mais fácil:
Isso ainda mostrará o
?foo=bar
download, mas exibirá o restante do nome em ciano claro.fonte
Eu tenho uma abordagem semelhante à @Gregory Wolf, porque seu código sempre criava mensagens de erro como esta:
Portanto, primeiro verifico se existe uma string de consulta no nome do arquivo antes de mover o arquivo:
Isso verificará recursivamente todos os arquivos e removerá todas as cadeias de consulta em seus nomes de arquivos, se disponíveis.
fonte
Observe esses dois comandos que criei para clonar um site e, após a conclusão do clone, você poderá executar o segundo comando.
O segundo comando examinará todo o clone, procurará por nomes de padrão de arquivo " ? " E removerá a string de consulta do nome do arquivo.
(Veja no GitHub Gist .)
fonte
Ainda mais fácil é isso: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use
Isso sugere um método que essencialmente usa a função de renomeação do wget (pode ser alterada para incluir o diretório) para vários arquivos. Veja a segunda versão proposta.
fonte