A maneira típica de obter o tamanho do arquivo sem baixá-lo seria emitir uma solicitação HTTP HEAD e esperar que o servidor envie o tamanho de volta no cabeçalho Content-Length
. Geralmente, para arquivos estáticos como deb
, é provável que os servidores enviem essas informações, embora não haja garantia.
Existem várias ferramentas que podem enviar essas solicitações HTTP HEAD. Aqui está um exemplo de uma função que faz isso usando o utilitário curl
:
get_size() { # arg: URI
curl -sI "$1" | sed -n 's/^Content-Length: \([0-9]\{1,\}\).*//p'
}
Observe que ele retornará esse Content-Length
, independentemente de a consulta ser bem-sucedida ou de retornar com um erro (como 404 Not found
, em que Content-Length
será o tamanho da mensagem de erro).
Alternativas para curl
incluem:
- GNU
wget
:wget -qSO- --max-redirect=0 --method=HEAD "$1"
. Esse retornará com um status de saída que não seja bem-sucedido se a consulta não for bem-sucedida (para ser usada em combinação comset -o pipefail
, por exemplo). - Comando Perl LWP
HEAD
:HEAD "$1"
. Esse também relatará falhas de consulta, mas segue os redirecionamentos HTTP e não vê que você possa desabilitar isso.
Se for um método amigável ao ser humano, você também pode usar lftp
como em:
$ lftp -c 'du -h http://mirror.fsf.org/trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb'
12K /trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb