Como obtenho o tamanho do arquivo (deb) do link / URL de download?

1

Eu uso --print-uris de apt-get para obter url (download-link) de debs que eu quero baixar e instalar no meu Debian ( Trisquel ) GNU / Linux.

--print-uris
           Instead of fetching the files to install their URIs are printed. Each URI will have the path, the
           destination file name, the size and the expected MD5 hash. Note that the file name to write to will not
           always match the file name on the remote site! This also works with the source and update commands. When
           used with the update command the MD5 and size are not included, and it is up to the user to decompress any
           compressed files. Configuration Item: APT::Get::Print-URIs.

Exemplo de saída para wesnoth : -

$ apt_uris wesnoth
http://mirror.fsf.org/trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb
http://mirror.fsf.org/trisquel/pool/main/s/sdl-ttf2.0/libsdl-ttf2.0-0_2.0.11-3_i386.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-data_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-core_1.10.7-1ubuntu0.14.04.1_i386.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-httt_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-tsg_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-trow_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-ttb_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-ei_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-utbs_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-did_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-nr_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-sof_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-sotbe_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-l_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-aoi_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-thot_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-low_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-dm_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-dw_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-music_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth_1.10.7-1ubuntu0.14.04.1_all.deb

Nota:

$ type apt_uris 
apt_uris is a function
apt_uris () 
{ 
    sudo apt-get install "$@" --print-uris -qq | grep http:// | cut -d "'" -f 2;
}

Agora vamos direto ao ponto: - Eu quero pegar / imprimir o tamanho de cada arquivo deb do URL (sem baixar).

Como faço isso usando wget ou outra coisa?

    
por Pandya 23.06.2015 / 15:49

2 respostas

4

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 com set -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
    
por 23.06.2015 / 15:54
0

Nos derivados do Debian, o tamanho de cada arquivo .deb é armazenado na lista de pacotes, para que você possa recuperá-lo sem baixar nada.

Na verdade, apt-get --print-uris fornece as informações diretamente:

$ apt-get install nginx --print-uris -qq
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx-common_1.9.1-1_all.deb' nginx-common_1.9.1-1_all.deb 96110 MD5Sum:fc64530dcd5a4d50a36b9f2423fcf6c2
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx-full_1.9.1-1_amd64.deb' nginx-full_1.9.1-1_amd64.deb 471998 MD5Sum:6392f45e4e376ea3be2e60949dd80fe0
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx_1.9.1-1_all.deb' nginx_1.9.1-1_all.deb 75882 MD5Sum:ab5fa732657fba06544b353572967383

O terceiro campo é o tamanho do arquivo .deb .

Enquanto estou nisso, você não precisa executar apt-get as root para determinar a lista de pacotes para download!

    
por 24.06.2015 / 19:03

Tags