Как получить размер (deb) файла из ссылки для загрузки / URL?

Я использую --print-uris apt-get чтобы получить url (download-link) из debs, которые я хочу скачать и установить на своем 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. 

Пример вывода для 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; } 

Теперь переходим к сути: – Я хочу получить / распечатать размер каждого файла deb из URL (без загрузки).

Как это сделать, используя wget или что-то еще?

2 Solutions collect form web for “Как получить размер (deb) файла из ссылки для загрузки / URL?”

Типичным способом получения размера файла без его загрузки было бы выдать запрос 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 включают:

  • GNU wget : wget -qSO- --max-redirect=0 --method=HEAD "$1" . Это будет возвращено с статусом выхода из set -o pipefail если запрос не является успешным (для использования в сочетании с 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 

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

Пока я нахожусь, вам не нужно запускать apt-get как root чтобы определить список загружаемых пакетов!

  • Используя wget, загрузите веб-сайт, переведенный google translate
  • Почему параллель замедляется через некоторое время?
  • Как работать с отсутствующими заголовками «последнего изменения»?
  • Сохраните команду ../../../ в команде wget
  • рекурсивная загрузка с веб-сайта
  • Необходимо выполнить javascript как работу cron ... возможно?
  • Попытка получить динамическую страницу с wget без успеха
  • попробуйте загрузить файл с сервера, если известен путь
  • Как запустить HTTP-запрос без использования CURL
  • Использование sed для добавления URL-адреса в начало каждой строки
  • Как я могу использовать wget для загрузки больших файлов?
  • Linux и Unix - лучшая ОС в мире.