Como permitir que o wget substitua arquivos

9

Usando o wgetcomando, como permito / instruo sobrescrever meu arquivo local toda vez, independentemente de quantas vezes eu chame.

Digamos, eu quero baixar um arquivo do local: http: //server/folder/file1.html

Aqui, sempre que digo wget http://server/folder/file1.html, quero que isso file1.htmlseja sobrescrito no meu sistema local, independentemente da hora em que foi alterado, já baixado, etc. Minha intenção / caso de uso aqui é que, quando ligo para o wget, tenho certeza que desejo para substituir / substituir o arquivo existente.

Eu tentei as seguintes opções, mas cada uma delas se destina / se destina a algum outro propósito.

  1. -nc => --no-clobber
  2. -N => Ativar registro de data e hora
  3. -r => Ativar recuperação recursiva
Gnanam
fonte

Respostas:

7
wget -q http://www.whatever.com/filename.txt -O /path/filename.txt 

-q é o modo silencioso para que você possa jogá-lo em um cron sem nenhuma saída do comando

aleroot
fonte
Não há opção direta no wgetcomando que faça isso sem que eu especifique explicitamente usando -O filename?
Gnanam
3
Parece que não há como forçar a substituição de todos os arquivos ao baixar arquivos usando o wget. No entanto, a opção -N pode certamente forçar o download e a substituição de arquivos mais recentes. wget -N irá substituir arquivo original se o tamanho ou timestamp mudança
aleroot
Não é verdade. direcionar a saída do comando em stdout e canalizá-lo para o arquivo: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani
8

Esta opção funciona

wget -N http://server/folder/file1.html

informação

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.
Steven Penny
fonte
4

Usar em curlvez disso?

curl http://server/folder/file1.html > file1.html
Stu Thompson
fonte
Eu não sou um especialista em Linux. Qual é a diferença básica entre wgete curl? Tenho certeza de que cada comando é destinado a algum propósito específico.
Gnanam
1
@ Gnanam: Eles se sobrepõem bastante no utilitário básico da CLI, na verdade. Ambos podem fazer uma conexão HTTP e salvar o resultado no disco. Para uma análise detalhada das diferenças, consulte daniel.haxx.se/docs/curl-vs-wget.html Independentemente disso, o uso acima é totalmente válido. Existem outras ferramentas nesta área geral, também: curl.haxx.se/docs/comparison-table.html
Stu Thompson
Esses 2 links são realmente úteis para entender a diferença.
Gnanam
0

Eu não acho que você pode fazer isso, a menos que você também baixe os diretórios (então passe o sinalizador -x). Se você souber qual é o arquivo, poderá usar -O filename, por exemplo:
wget http://yourdomain.com/index.html -O index.html

James L
fonte
0

Não experimentado: talvez você possa trabalhar wget -r --level=0.

Outra possibilidade: curl -Osubstitui (mas usa uma maneira diferente de escolher o nome do arquivo, que pode ou não ser importante para você).

Gilles 'SO- parar de ser mau'
fonte
Essa wgetlinha realmente não faz a coisa correta porque cria uma hierarquia de subdiretórios. curl -Opor outro lado, baixa corretamente o arquivo, substituindo as cópias existentes.
sth
0

Por que não colocar um pequeno invólucro em torno do wget no seu script?

O script pode mover todos os arquivos para um local temporário e depois apagar os arquivos / páginas da web remotos.

Em caso de sucesso, exclua os arquivos no local temporário. Em caso de falha, mova os arquivos de volta e gere um erro.

Não existe uma maneira simples de fazer o que você deseja usando apenas o wget, a menos que você saiba especificamente o nome de todos os arquivos; nesse caso, a opção -O permitirá que você force o nome do arquivo baixado.

Richard Holloway
fonte