다운로드 링크/URL에서 (deb) 파일의 크기를 얻는 방법은 무엇입니까?

다운로드 링크/URL에서 (deb) 파일의 크기를 얻는 방법은 무엇입니까?

나는 데비안에 다운로드하고 설치하고 싶은 debs의 URL(다운로드 링크)을 얻는 --print-uris데 사용합니다 (apt-get물방울)GNU/리눅스.

--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.

예제 출력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

노트:

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

이제 요점을 살펴보겠습니다.URL에서 각 deb 파일의 크기를 가져오거나 인쇄하고 싶습니다.(다운로드가 필요하지 않습니다).

wget또는 다른 수단을 사용하여 어떻게 이를 수행할 수 있습니까 ?

답변1

다운로드하지 않고 파일 크기를 얻는 일반적인 방법은 HTTP HEAD 요청을 만들고 서버가 크기를 Content-Length헤더에 다시 보내도록 하는 것입니다. 일반적인 정적 파일(예: deb파일)의 경우 서버가 해당 정보를 다시 보낼 수 있지만 보장할 수는 없습니다.

이러한 HTTP HEAD 요청을 보내기 위한 다양한 도구가 있습니다. 다음은 이 유틸리티를 사용하여 이 작업을 수행하는 함수의 예입니다 curl.

get_size() { # arg: URI
  curl -sI "$1" | sed -n 's/^Content-Length: \([0-9]\{1,\}\).*/\1/p'
}

Content-Length쿼리가 성공하거나 오류(예: 오류 메시지의 404 Not found크기 )를 반환하는지 여부가 반환됩니다.Content-Length

대안은 다음과 같습니다 curl:

  • 그누 wget:. wget -qSO- --max-redirect=0 --method=HEAD "$1"쿼리가 실패한 경우(예: set -o pipefail인스턴스와 함께 사용되는 경우) 쿼리는 실패한 종료 상태를 반환합니다.
  • Perl LWP HEAD명령: HEAD "$1". 이 명령도 쿼리 실패를 보고하지만 HTTP 리디렉션을 따르므로 비활성화할 수 없는 것 같습니다.

인도적인 접근 방식을 원한다면 다음을 사용할 수도 있습니다 lftp.

$ 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

답변2

Debian 파생 제품에서는 각 파일의 크기가 .deb패키지 목록에 저장되므로 검색하기 위해 아무것도 다운로드할 필요가 없습니다.

사실, apt-get --print-uris나는 당신에게 직접 정보를 제공할 것입니다:

$ 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

세 번째 필드는 .deb파일의 크기입니다.

이렇게 하면 다운로드할 패키지 목록을 결정하기 위해 as를 apt-get실행할 필요가 없습니다!root

관련 정보