2011-01-13 50 views
39

Ví dụ:Chỉ hiển thị thanh tiến trình wget?

wget http://somesite.com/TheFile.jpeg

downloading: TheFile.tar.gz ... 
--09:30:42-- http://somesite.com/TheFile.jpeg 
      => `/home/me/Downloads/TheFile.jpeg' 
Resolving somesite.co... xxx.xxx.xxx.xxx. 
Connecting to somesite.co|xxx.xxx.xxx.xxx|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 1,614,820 (1.5M) [image/jpeg] 

25% [======>        ] 614,424  173.62K/s ETA 00:14 

Làm thế nào tôi có thể làm cho nó trông như thế này

downloading: TheFile.jpeg ... 
25% [======>        ] 614,424  173.62K/s ETA 00:14 

Tôi biết curl có thể làm điều đó, tuy nhiên tôi cần để có được wget để làm công việc đó .

+1

Tôi không nghĩ rằng điều này là có thể mà không cần viết kịch bản để phân tích cú pháp đầu ra của wget. 'wget -nv' là về gần nhất bạn sẽ nhận được, và nó không thực sự hiển thị một thanh tiến trình, chỉ là một bản tóm tắt một dòng khi tải xuống hoàn tất. – cdhowie

Trả lời

18

Bạn có thể sử dụng bộ lọc sau:

progressfilt() 
{ 
    local flag=false c count cr=$'\r' nl=$'\n' 
    while IFS='' read -d '' -rn 1 c 
    do 
     if $flag 
     then 
      printf '%c' "$c" 
     else 
      if [[ $c != $cr && $c != $nl ]] 
      then 
       count=0 
      else 
       ((count++)) 
       if ((count > 1)) 
       then 
        flag=true 
       fi 
      fi 
     fi 
    done 
} 

Cách sử dụng:

$ wget --progress=bar:force http://somesite.com/TheFile.jpeg 2>&1 | progressfilt 
100%[======================================>] 15,790  48.8K/s in 0.3s 

2011-01-13 22:09:59 (48.8 KB/s) - 'TheFile.jpeg' saved [15790/15790] 

Chức năng này phụ thuộc vào một chuỗi các 0x0d0x0a0x0d0x0a0x0d được gửi ngay trước khi thanh tiến trình được bắt đầu. Hành vi này có thể được thực hiện phụ thuộc.

-4
curl -o pic.png http://somesite.com/pic.png 

Chỉ hiển thị thông tin tiến trình mà không có cuộc trò chuyện URL/địa chỉ.

+2

Ông nói khá cụ thể rằng ông không muốn sử dụng 'curl' –

2

Đây là dụ khác, có lẽ sẽ giúp bạn

download() { 
    local url=$1 
    echo -n " " 
    wget --progress=dot $url 2>&1 | grep --line-buffered "%" | sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}' 
    echo -ne "\b\b\b\b" 
    echo " DONE" 
} 
4

Bạn có thể sử dụng tùy chọn tiêu chuẩn:

wget --progress=bar http://somesite.com/TheFile.jpeg 
+0

Tôi không về một số distro khác, nhưng điều này chắc chắn không phải là những gì OP yêu cầu, ít nhất là trên Ubuntu. Tức là, nó vẫn hiển thị thông tin khác, nhưng OP yêu cầu cho "thanh tiến trình chỉ" ... –

6

Bạn có thể sử dụng follow tùy chọn tail:

wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +6 

Các +6 là xóa 6 dòng đầu tiên. Có thể khác với phiên bản wget hoặc ngôn ngữ của bạn.

Bạn cần sử dụng --progress=bar:force nếu không, wget sẽ chuyển sang loại dot.

Nhược điểm là làm mới ít thường xuyên hơn với wget (trông giống như sau mỗi 2 giây). Tùy chọn --sleep-interval của tail dường như chỉ dành cho điều đó, nhưng nó không thay đổi bất cứ điều gì đối với tôi.

+0

bạn có biết tại sao nó chuyển sang kiểu dấu chấm không? một số vấn đề loại TERM? lực lượng làm việc cho tôi - cảm ơn! –

73

Sử dụng:

wget http://somesite.com/TheFile.jpeg -q --show-progress 

-q - Turn off đầu ra wget của

--show-progress - Force wget để hiển thị thanh tiến trình trong bất kỳ cách rườm rà

+5

Đối với tôi, chương trình này hiển thị tùy chọn 'wget: unrecognized' --show-progress''? Bạn có biết điều này chỉ xuất hiện trong các phiên bản wget mới hơn không? –

+7

@ UliKöhler [cờ chỉ tồn tại từ 1.16] (http://stackoverflow.com/a/32491843/1267663) – Whymarrh

10

Tùy chọn --show-progress, như chỉ ra bởi những người khác , là tùy chọn tốt nhất, nhưng nó chỉ có sẵn từ GNU wget 1.16, xem Noteworthy changes in wget 1.16.

Để được an toàn, đầu tiên chúng ta có thể kiểm tra nếu --show-progress được hỗ trợ:

# set progress option accordingly 
wget --help | grep -q '\--show-progress' && \ 
    _PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT="" 

wget $_PROGRESS_OPT ... 

Có lẽ đó là thời gian để xem xét chỉ sử dụng curl.

0

Đây không phải là câu trả lời theo nghĩa đen nhưng đoạn mã này cũng có thể hữu ích đối với một số người đến đây, ví dụ: "Zenity wget GUI":

LANG=C wget -O /dev/null --progress=bar:force:noscroll --limit-rate 5k http://nightly.altlinux.org/sisyphus/ChangeLog 2>&1 | stdbuf -i0 -o0 -e0 tr '>' '\n' | stdbuf -i0 -o0 -e0 sed -rn 's/^.*\<([0-9]+)%\[.*$/\1/p' | zenity --progress --auto-close

là gì quan trọng đối với tôi là stdbuf(1).

0

Đây là giải pháp sẽ hiển thị cho bạn một dấu chấm cho mỗi tệp (hoặc dòng, cho vấn đề đó). Nó đặc biệt hữu ích nếu bạn đang tải xuống với --recursive. Điều này sẽ không phát hiện lỗi và có thể hơi tắt nếu có thêm dòng, nhưng đối với tiến trình chung trên rất nhiều tệp, nó hữu ích:

wget -r -nv https://example.com/files/ | \ 
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }' 
Các vấn đề liên quan