Evite criar vários arquivos com o wget

3

Eu uso wget para chamar um link a cada 10 segundos assim:

#/bin/sh
while true; do
    wget http://www.some.random.link/to/some/PHP/script
    sleep 10
done

Isso produz arquivos vazios chamados script_name.# , em que # é incrementado a cada execução.

Por que isso acontece?

    
por Katafalkas 23.04.2012 / 02:33

2 respostas

5

Isso porque o wget baixa a saída do seu script (que, presumivelmente, está vazio) e salva-o em um arquivo, acrescentando um número a cada vez para não sobrescrever o arquivo baixado anteriormente.

Há algumas opções para evitar isso.

  1. Evite que o wget baixe nada, usando a opção --spider :
    wget --spider http://www.some.random.link/to/some/PHP/script
    No entanto, isso pode fazer com que seu script não funcione, pois o IIRC emite apenas uma solicitação HEAD .
  2. Faça o download da saída, mas descarte-a enviando-a para /dev/null :
    wget -O /dev/null http://www.some.random.link/to/some/PHP/script
  3. Faça o download da saída, mas exclua se depois, usando a opção --delete-after :
    wget --delete-after http://www.some.random.link/to/some/PHP/script
  4. Para fins de integridade, se você puder conviver com um arquivo, use a opção -nc para evitar que o wget faça o download de arquivos que já existam localmente:
    wget -nc http://www.some.random.link/to/some/PHP/script
por 23.04.2012 / 02:44
1

Como uma correção alternativa, você pode evitar o uso de wget - que, como o próprio nome indica, é destinado a obter conteúdo da web de um determinado URL. Em outras palavras, ele é construído para ser uma ferramenta de "download". (É, claro, muito flexível, como Indrek demonstrou em sua resposta. Mas seus padrões funcionam contra seus propósitos.)

Como você não precisa ou deseja fazer download de nada (você está acessando a URL para disparar um script do lado do servidor), o comando curl é um pouco mais apropriado para o seu script. Ele gravará os resultados de suas solicitações para stdout por padrão, em vez de para um arquivo.

Portanto, substituir wget por curl em seu código acima deve corrigir o problema de criação de arquivos sem qualquer trabalho adicional.

    
por 23.04.2012 / 10:58