Como posso limitar o tamanho do arquivo baixado no wget?

13

Quero usar wget(de um script php) para baixar arquivos de imagem, mas não quero baixar arquivos com um determinado tamanho.

Posso limitar o tamanho do arquivo wget? Se não, qual é a melhor maneira?

T. Brian Jones
fonte

Respostas:

14

Se você estiver executando scripts de downloads, considere usar curl. O Wget pode analisar a saída e buscar recursivamente sites inteiros, mas o curl tem muito mais opções relacionadas ao download real de um arquivo específico. Aqui está a opção relevante na página de manual:

--max-filesize
Especifique o tamanho máximo (em bytes) de um arquivo para download. Se o arquivo solicitado for maior que esse valor, a transferência não será iniciada e a curvatura retornará com o código de saída 63.
NOTA: O tamanho do arquivo nem sempre é conhecido antes do download e, para esses arquivos, essa opção não tem efeito, mesmo que o arquivo a transferência acaba sendo maior que esse limite.

Vale a pena considerar a observação sobre isso apenas funcionar para alguns arquivos. O cliente depende do servidor para relatar o tamanho do arquivo antes de iniciar o download. A maioria, mas certamente nem todos os servidores relatam isso.

Caleb
fonte
6
Você pode combinar isso com um limite do sistema para proibir onda de criação de um arquivo maior do que $nbytes: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlserá cancelado com um erro se o tamanho do arquivo ultrapassar os $n/512blocos de 512 bytes.
Gilles 'SO- stop be evil'
Você também pode httrack.
Vi.
6

Se você deseja usar o wget, aqui está uma maneira de testar o tamanho do arquivo sem fazer o download:

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

onde $URLé o URL do arquivo que você deseja baixar, é claro.

Assim, você pode condicionar seu script com base na saída. tal como:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

por limitar o tamanho do download para 20 MB.

(o código é feio, apenas para fins informativos).

Philomath
fonte
1

Não parece haver nenhuma maneira razoável de definir um tamanho máximo de arquivo com o wget.

T. Brian Jones
fonte
2
A abordagem de Gilles com ulimit(ver bash(1), setrlimit(2)) também irá trabalhar com wget(1), embora seja um pouco pesada.
Julio