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?
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?
Respostas:
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.
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).
Não parece haver nenhuma maneira razoável de definir um tamanho máximo de arquivo com o wget.
ulimit
(ver bash(1)
, setrlimit(2)
) também irá trabalhar com wget(1)
, embora seja um pouco pesada.
O wget tem uma -Q
--quota
opção que limita a quantidade máxima de download quando vários URLS (lista recursiva ou de entrada) são fornecidos.
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
bytes:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
será cancelado com um erro se o tamanho do arquivo ultrapassar os$n/512
blocos de 512 bytes.