Получить размер файла для wget перед тем, как это сделать?

Мне интересно, есть ли способ заранее проверить размер файла, который я могу скачать через wget? Я знаю, что с помощью --spider опция говорит мне, существует ли файл или нет, но я также заинтересован в поиске размера этого файла.

4 ответа

Решение

Хм.. для меня --spider отображает размер:

$ wget --spider http://henning.makholm.net/
Spider mode enabled. Check if remote file exists.
--2011-08-08 19:39:48--  http://henning.makholm.net/
Resolving henning.makholm.net (henning.makholm.net)... 85.81.19.235
Connecting to henning.makholm.net (henning.makholm.net)|85.81.19.235|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9535 (9.3K) [text/html]     <-------------------------
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

$ 

(Но имейте в виду, что не все веб-серверы будут информировать клиентов о длине данных, за исключением случаев, когда соединение закрывается, когда все это отправлено.)

Если вас беспокоит изменение wget формата, в котором указывается длина, вы можете использовать wget --spider --server-response и искать Content-Length заголовок в выводе.

curl --head URL

Ищите "Content-Length:" в выходных данных.

И благодаря комментарию Хеннинга Махолма:

wget --spider URL

и ищите "Длина:" в выходных данных.

Это должно работать:

      size_bytes=$(wget -S "${url}" --start-pos=500G 2>&1 | grep Content-Length | cut -d: -f2)

На самом деле я искал размер каталога, и Google привел меня сюда. Хотя здесь нет прямого ответа, принятый ответ помог мне создать поверх него следующую команду:

      wget --spider -m -np URL-to-dir 2>&1 | sed -n -e /unspecified/d -e '/^Length: /{s///;s/ .*//;p}' | paste -s -d+ | bc

Вышеуказанные прогоны wgetв режиме паука для всего каталога, в результате чего регистрируется длина каждого файла в этом каталоге. Затем вывод направляется в sedдля извлечения последовательности чисел (размеров в байтах). Последние два компонента в конвейере просто помогают суммировать его, чтобы получить общее количество в байтах.

Другие вопросы по тегам