केवल प्रगति पट्टी दिखाने के लिए कैसे?


81

उदाहरण के लिए:

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

मैं इसे इस तरह से कैसे देख सकता हूं

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

मुझे पता है कि कर्ल ऐसा कर सकता है, हालांकि मुझे उस काम को करने के लिए दांव लगाने की जरूरत है।


1
मुझे नहीं लगता कि यह स्क्रिप्ट के आउटपुट को पार्स करने के लिए स्क्रिप्ट लिखे बिना संभव है। wget -nvआपके द्वारा प्राप्त किए जा रहे निकटतम के बारे में है, और जब डाउनलोड पूरा हो जाता है, तो यह वास्तव में एक प्रगति बार प्रदर्शित नहीं करता है।
cdhowie

3
wget --progress = bar: force: noscroll
Leo Gallucci

2
curlफ़ाइलें डाउनलोड कर सकते हैं और एक साधारण प्रगति पट्टी का उत्पादन कर सकते हैं:echo "downloading: $file ..." && curl --progress-bar --remote-name --location "$url"
curusarn

जवाबों:


26

आप निम्न फ़िल्टर का उपयोग कर सकते हैं:

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

उपयोग:

$ 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]

यह फ़ंक्शन 0x0d0x0a0x0d0x0a0x0dप्रगति बार शुरू होने से ठीक पहले भेजे जाने के अनुक्रम पर निर्भर करता है। यह व्यवहार कार्यान्वयन पर निर्भर हो सकता है।


यदि आपके पास wget का कम से कम संस्करण 1.16 नहीं है तो यह उपयोगी है!
ए -312

1
चार-एन्कोडिंग के साथ बग रोकने के लिए, आप को बदलने के लिए %cद्वारा %s: इसे ठीक करने के
A-312

@ हॉर्ससुज: मैं जो देख रहा हूं वह यूनिकोड के बाएं और दाएं एकल उद्धरण चिह्नों से है। मैं परिवर्तन करने के लिए अपने उत्तर को संपादित करूँगा। रिपोर्ट के लिए धन्यवाद।
डेनिस विलियमसन

आप दूसरे फ़ंक्शन के साथ अपना कोड भी सुधार सकते हैं, यह अधिक पठनीय है: pastebin.com/Ek5Wf4XK
A-312

मैं मानता हूं कि यह एक पूर्ण स्क्रिप्ट में उपयोगी है, लेकिन मुझे नहीं लगता कि यह उत्तर के लिए आवश्यक है।
डेनिस विलियमसन

184

उपयोग:

wget http://somesite.com/TheFile.jpeg -q --show-progress
  • -q: wgetआउटपुट बंद करें

  • --show-progress: wgetप्रगति पट्टी को प्रदर्शित करने के लिए बल चाहे कोई भी हो, इसकी वाचालता का स्तर क्या है


11
मेरे लिए यह दिखाता है wget: unrecognized option '--show-progress'? क्या आप जानते हैं कि क्या यह केवल नए wget संस्करणों में मौजूद है?
उली कोहलर


12
संस्करणों के बीच कुछ अंतर होना चाहिए, लेकिन विज्ञापन के रूप में काम करने के लिए, 1.19 संस्करण के लिए, मुझे निम्नलिखित विकल्प भी जोड़ने की आवश्यकता है: और --progress=bar:force:noscrollसाथ में । यह एक निर्माण के भीतर डॉकफाइल के लिए अच्छी तरह से काम करता है। -q--show-progress
योयो

1
जैसा कि @ योयो उल्लेख करता है, नई कहानियों --progress=bar:force:noscrollको उत्पन्न होने से रोकने के लिए मत भूलना !
ब्रेंट फॉस्ट

21

इन झंडों का उपयोग करें:

wget  -q --show-progress --progress=bar:force 2>&1

सर्वश्रेष्ठ एक-लाइनर। मुझे समझ नहीं आता कि यह चुना हुआ जवाब क्यों नहीं है।
सलामंदर

क्या करता force 2>&1है? बस wget -q --show-progress --progress=barमेरे लिए एक ही आउटपुट के लिए उपज लगता है।
एमबीटी

यह एक विजेता है। यह स्टैक ओवरफ्लो में एक बग है कि यह शीर्ष उत्तर नहीं है।
6

@ एमबीटी: "2> और 1" बस स्टैडर को जोड़ती है (आमतौर पर त्रुटि और लॉग संदेश के लिए) और स्टडआउट (आमतौर पर वास्तविक परिणामों के लिए) आउटपुट। यहाँ यह अनावश्यक है, लेकिन अक्सर इसका उपयोग तब किया जाता है जब लोग किसी प्रक्रिया के पूर्ण आउटपुट (परिणाम और त्रुटि संदेश) को उसी लक्ष्य पर पुनर्निर्देशित करना चाहते हैं
jov14

13

आप के followविकल्प का उपयोग कर सकते हैं tail:

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

+6पहले 6 लाइनों को हटाने के लिए है। यह आपके wgetया आपके भाषा के संस्करण पर भिन्न हो सकता है ।

आपको --progress=bar:forceअन्यथा dotप्रकार के लिए स्विच स्विच का उपयोग करने की आवश्यकता है ।

नकारात्मक पक्ष यह है कि रिफ्रेशिंग (अक्सर हर 2 सेकंड की तरह दिखता है) विगेट्स की तुलना में कम होता है। --sleep-intervalका विकल्प tailसिर्फ इतना है कि के लिए किया जा रहा है, लेकिन यह मेरे लिए कुछ भी नहीं बदला।


क्या आप जानते हैं कि यह डॉट प्रकार पर क्यों स्विच करता है? कुछ TERM टाइप इश्यू? बल ने मेरे लिए काम किया - धन्यवाद!
नील मैकगिल

पूंछ मूल्य "8" के साथ केवल लक्ष्य फ़ाइल नाम के बिना प्रगति बार दिखाने के लिए इसका उपयोग करें। wget somesite.com/TheFile.jpeg --progress=bar:force 2>&1 | tail -f -n +8
एमएस अरुण

13

विकल्प --show-progress, जैसा कि दूसरों द्वारा बताया गया है, सबसे अच्छा विकल्प है, लेकिन यह केवल GNU wget 1.16 के बाद से उपलब्ध है , WET 1.16 में उल्लेखनीय परिवर्तन देखें ।

सुरक्षित होने के लिए, हम पहले जाँच कर सकते हैं कि --show-progressक्या समर्थित है:

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

wget $_PROGRESS_OPT ...

शायद यह सिर्फ उपयोग करने पर विचार करने का समय है curl


4

आप मानक विकल्पों का उपयोग कर सकते हैं:

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

मैं कुछ अन्य विकृतियों के बारे में नहीं जानता, लेकिन यह निश्चित रूप से ओपी के लिए कम से कम उबंटू पर नहीं है। यानी, यह अभी भी अन्य जानकारी दिखाता है, लेकिन ओपी ने "केवल प्रगति बार" के लिए कहा ...
डी'केज

2

यह एक और उदाहरण है, शायद आपकी मदद करेगा

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"
}

0

यहां एक समाधान है जो आपको प्रत्येक फ़ाइल (या उस मामले के लिए लाइन) के लिए एक डॉट दिखाएगा। यदि आप डाउनलोड कर रहे हैं तो यह विशेष रूप से उपयोगी है --recursive। यह त्रुटियों को पकड़ नहीं पाएगा और यदि अतिरिक्त लाइनें हैं, तो यह थोड़ी दूर हो सकती है, लेकिन बहुत सी फाइलों पर सामान्य प्रगति के लिए यह उपयोगी है:

wget -r -nv https://example.com/files/ | \
    awk -v "ORS=" '{ print "."; fflush(); } END { print "\n" }'

-3

यह वस्तुतः एक उत्तर नहीं है, लेकिन यह स्निपेट यहां आने वाले कुछ लोगों के लिए भी उपयोगी हो सकता है जैसे "ज़ेनिटी वेट गाई":

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

मेरे लिए क्या महत्वपूर्ण था stdbuf(1)


2
क्या आप बता सकते हैं कि यह लंबी लाइन क्या करती है? यदि आप पहले से ही यह कहते हैं कि यह "वस्तुतः उत्तर नहीं है", तो यह प्रश्न से संबंधित कैसे है?
निको हसे

यह एक संभावित खोज दिशा के माध्यम से संबंधित है, यही मैंने कहा है; कमांड लाइन "सी" लोकेल में तर्कों के साथ चलती है ताकि यह इस तरह से अपनी प्रगति का उत्पादन कर सके जो आगे की प्रक्रिया के लिए उपयुक्त हो (आई / ओ बफरिंग बंद हो गई) जिनेटी की प्रगति पट्टी में - जिसके परिणामस्वरूप कुछ के लिए अच्छा जीयूआई है उदाहरण के लिए, सहायक डाउनलोड करें।
माइकल शगोरिन

कृपया सभी स्पष्टीकरण उत्तर में ही दें, टिप्पणी अनुभाग पर नहीं
निको हसे

जो लोग दिए गए कमांड लाइन से सभी स्पष्टीकरण प्राप्त नहीं कर सकते हैं उन्हें वास्तव में इसकी आवश्यकता नहीं है - वे या तो कॉपी-पेस्ट करेंगे बिना ज्यादा सोचे या बस इसे छोड़ दें; और जो लोग कर सकते हैं, मुझे दुभाषिए की जरूरत नहीं है। यह कमिटेड डिफरेंट और कमिट मैसेज की तरह है: पूर्व को उत्तरार्द्ध में दोहराना नहीं है, बल्कि इसका कारण और इरादा है। कृपया लोगों से मूर्खतापूर्ण बातें करने के लिए न कहें :-)
माइकल शगोरिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.