LINUX.ORG.RU

> Прогресс-бар добавляется не патчем на исходники dd, а при помощи отдельной внешней утилиты.

шикарно. научить бы её понимать http/ftp, и wget не нужен :)

очень полезная вещь, надо будет когда-нибудь поинтересоваться

ARHL
()

вот это уже бааальшой такой гуд

vitroot ★★
()

лучше бы в натив прикрутили :(

vitroot ★★
()
Ответ на: комментарий от ARHL

> шикарно. научить бы её понимать http/ftp, и wget не нужен :)

Пжлста! Заменятор wget (HTTP only, но в теории и FTP прикрутить можно):

#!/bin/sh

host=$( printf "%s" "${1}" | cut -d '/' -f 3 )
path=$( printf "%s" "${1}" | cut -d '/' -f 4- )

(
	printf "GET /%s HTTP/1.0\n\r" "${path}"
	printf "User-Agent: get.sh/0.0.0\n\r"
	printf "Accept: */*\n\r"
	printf "Host: %s\n\r" "${host}"
	printf "Connection: Close\n\r"
	printf "\n\r"
) | nc "${host}" 80 | (
	while read l; do
		l=$( printf "%s" "${l}" | tr -d "\r" )

		[ -z "${length}" ] && length=$( printf "%s" "${l}" | sed -n "s/^.*Content-Length: *\([0-9]*\).*$/\1/p" )
		[ -n "${length}" ] && length=$(( $length ))

		if [ -z "${l}" ]; then
			cat | if [ -n "${length}" ]; then
				echo "Length: ${length} bytes" >&2
				bar -s "${length}"
			else
				bar
			fi > "${2}"
			
			break
		fi

		echo "HTTP Header: ${l}"
	done
)

Пример использования:

$ ./get.sh http://static.moinmo.in/files/moin-1.8.3.tar.gz file.tar.gz
HTTP Header: HTTP/1.0 200 OK
HTTP Header: Date: Wed, 29 Apr 2009 06:31:55 GMT
HTTP Header: Server: Apache/2.2.9 (Debian) mod_wsgi/2.4 Python/2.5.2
HTTP Header: Last-Modified: Sun, 26 Apr 2009 22:48:36 GMT
HTTP Header: ETag: "37b32-5b8bcc-4687d07afb900"
HTTP Header: Accept-Ranges: bytes
HTTP Header: Content-Length: 5999564
HTTP Header: Cache-Control: max-age=86400
HTTP Header: Expires: Thu, 30 Apr 2009 06:31:55 GMT
HTTP Header: Content-Type: application/x-gzip
HTTP Header: X-Cache: MISS from server.loc
HTTP Header: X-Cache-Lookup: MISS from server.loc:3128
HTTP Header: Via: 1.0 server.loc (squid/3.0.STABLE13)
HTTP Header: Proxy-Connection: close
Length: 5999564 bytes
   5.7MB at  202.0KB/s  eta:   0:00:00  100% [====================================================================================================================================]
Copied: 5999564B (5.7MB) (100% of expected input)
Time: 29 seconds
Throughput: 206881B (202.0KB/s)

=)

Deleted
()
Ответ на: комментарий от Deleted

> Я в соседней консоли запускаю watch 'pkill -USR1 ^dd$'

Прогресс-бар как-то нагляднее. И соседнюю консоль можно не занимать =).

Deleted
()
Ответ на: комментарий от Deleted

> cat | if [ -n "${length}" ]; then

cat тут не нужен...

Deleted
()
Ответ на: комментарий от Deleted

:)))
man axel

$axel -a ftp://ftp.{be,nl,uk,de}.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2

Размер файла: 52665364 байта(ов)
Открывается выходной файл linux-2.6.28.tar.bz2
Найден файл состояния: 1953352 байта(ов) скачано, 50712012 осталось.
Начинаем скачивание

[ 34%] [....0 .....1 ...2 ..3 ] [ 573,6KB/s] [00:58]^C

15,0 мегабайта(ов) скачано за 26 секунд(ы). (573,56 КБ/с)

elipse ★★★
()
Ответ на: комментарий от Deleted

> Хочешь, чтобы я на шелле многопоточную скачивалку написал?! =)

не , ну чтобы лисапеты не изобретал :))

на wget & axel gui уже есть



И кстати,меня вполне устраивает и :

vitaly@debian:~$ wget --progress=bar http://static.moinmo.in/files/moin-1.8.3.tar.gz--2009-04-29 11:14:12-- http://static.moinmo.in/files/moin-1.8.3.tar.gz
Распознаётся static.moinmo.in... 78.47.126.99
Устанавливается соединение с static.moinmo.in|78.47.126.99|:80... соединение установлено.
Запрос HTTP послан, ожидается ответ... 200 OK
Длина: 5999564 (5,7M) [application/x-gzip]
Сохраняется в каталог: `moin-1.8.3.tar.gz'.

26% [===========================================> ] 1.598.189 176K/s ОВП 24s ^C


elipse ★★★
()

простой способ на другом терминале сделать

for i in `seq 1000` ; do sleep 5 ; kill -10 `/sbin/pidof dd` ; done

Sylvia ★★★★★
()
Ответ на: комментарий от elipse

> не , ну чтобы лисапеты не изобретал :))

На самом деле изобретать велосипеды - это весело!

=)

Deleted
()

По ссылке не ходил, но предполагаю что прогресс вычисляется относительно bs*count.
Что будет если count не задан, т.е. копируется весь if=...?

sdio ★★★★★
()
Ответ на: комментарий от Sylvia

А почему 1000, а не 1024 :)

Делайте уж тогда while kill -10 `/sbin/pidof dd`...

mky ★★★★★
()
Ответ на: комментарий от sdio

Размер задается через опции командной строки, а утилита работает пайпом. Гораздо интереснее, что у неё есть опция "--throttle", и она может ограничивать скорость передачи данных, чтобы не сильно загружать диск/сеть. Надо будет посмотреть.

mky ★★★★★
()
Ответ на: комментарий от Sylvia

100гиговый ноутбучный винчестер забивался нулями из /dev/zero 7800 секунд. А мне надо было несколько раз прогнать. Оставлял на ночь.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.