2008-09-18 34 views
14

मैं एक स्क्रिप्ट में बहुत सारे यूआरएल डाउनलोड करना चाहता हूं लेकिन मैं उन लोगों को सहेजना नहीं चाहता जो HTTP त्रुटियों का कारण बनें।क्या कोई कर्ल/wget विकल्प है जो कहता है कि http त्रुटियों पर फ़ाइलों को सहेजना नहीं है?

जहाँ तक मैं मैन पेज से बता सकता हूं, न तो curl या wget ऐसी कार्यक्षमता प्रदान करता है। क्या कोई अन्य डाउनलोडर के बारे में जानता है जो करता है?

+3

। हर किसी ने आपको ऐसी तकनीकें दीं जो कभी भी * कुछ भी डाउनलोड नहीं करतीं, या उन्होंने खुद को रोल करने के लिए कहा। क्या आपको केवल * असली * उत्तर नहीं दिया जाना चाहिए था? – iconoclast

उत्तर

13

एक लाइनर मैं बस यह बहुत ही उद्देश्य के लिए सेटअप:

(केवल एक एकल फाइल के साथ काम करता है, दूसरों के लिए उपयोगी हो सकता है)

A=$$; (wget -q "http://foo.com/pipo.txt" -O $A.d && mv $A.d pipo.txt) || (rm $A.d; echo "Removing temp file") 

यह रिमोट होस्ट से फ़ाइल डाउनलोड करने का प्रयास करेंगे। अगर कोई त्रुटि है, तो फ़ाइल नहीं रखी जाती है। अन्य सभी मामलों में, इसे रखा और बदला गया है।

+0

क्या आपका कहना है कि "अगर कोई * त्रुटि है, तो फाइल नहीं रखी जाती है"? अन्यथा आपने अनुरोध किए गए विपरीत के विपरीत किया था। वास्तव में – iconoclast

+0

! यह ठीक करेगा :) – Oct

11

मुझे लगता है कि curl करने के लिए -f विकल्प आप क्या चाहते हैं करता है:

-f , --fail

(HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when an HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22. [...]

हालांकि, अगर प्रतिक्रिया वास्तव में था एक 301 या 302 रीडायरेक्ट, कि अभी भी सहेजा जाता है, भले ही अपने गंतव्य एक त्रुटि में परिणाम होगा :

$ curl -fO http://google.com/aoeu 
$ cat aoeu 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/aoeu">here</A>. 
</BODY></HTML> 

अपने मृत अंत करने के लिए पुन: निर्देशन का पालन करने के लिए, यह भी -L विकल्प देते हैं:

-L , --location

(HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. [...]

+0

नहीं, यह केवल त्रुटियों की क्रियापदता से संबंधित है। एक बार उपयोग किया जाता है, त्रुटियों की रिपोर्ट नहीं की जाती है (लेकिन सामान्य रूप से सहेजी जाती है) वैसे भी धन्यवाद – akiva

+1

यह वही है जो मैं चाहता था ('curl -fO {URL}')। यह एक फ़ाइल को '404' पर सहेजता नहीं है।धन्यवाद – hypercrypt

+1

@hypercrypt आपकी टिप्पणी ने मुझे तब तक भ्रमित कर दिया जब तक मुझे एहसास हुआ कि क्या हो रहा था। एक महत्वपूर्ण चेतावनी में संपादित किया गया। – Thomas

-1

आप "-O -" विकल्प

wget -O - http://jagor.srce.hr/ 

के रूप में आप http://www.gnu.org/software/wget/manual/wget.html#Advanced-Usage

+3

यह * नहीं * ओपी के लिए क्या पूछा गया है। उन्होंने फ़ाइलों को डाउनलोड करने का कोई तरीका नहीं पूछा * यदि कोई त्रुटि है *। आपका उत्तर * कुछ भी * डाउनलोड नहीं करता है। – iconoclast

2

प्राचीन धागा पर मिल मोर जानकारी कर सकते हैं का उपयोग कर बचत के बिना फ़ाइल डाउनलोड कर सकते हैं .. एक समाधान की तलाश में यहां पहुंचे ... समाप्त हो गया ऐसा करने के लिए कुछ खोल कोड लिखना।

if [ `curl -s -w "%{http_code}" --compress -o /tmp/something \ 
     http://example.com/my/url/` = "200" ]; then 
    echo "yay"; cp /tmp/something /path/to/destination/filename 
fi 

यह एक tmp फ़ाइल के लिए उत्पादन डाउनलोड करेगा, और बनाने/आउटपुट फ़ाइल को अधिलेखित ही अगर स्थिति एक 200 मेरे USECASE था थोड़ा अलग है .. मेरे मामले में उत्पादन उत्पन्न करने के लिए> 10 सेकंड लेता है ... और मैं नहीं चाहता था कि गंतव्य अवधि उस अवधि के लिए खाली रहे।

0

मेरे पास प्रस्ताव करने के लिए एक कामकाज है, यह फ़ाइल डाउनलोड करता है लेकिन अगर इसका आकार 0 है (जो 404 होता है तो होता है) तो यह भी हटा देता है।

wget -O <filename> <url/to/file> 
if [[ (du <filename> | cut -f 1) == 0 ]]; then 
    rm <filename>; 
fi; 

यह zsh के लिए काम करता है लेकिन आप इसे अन्य गोले के लिए अनुकूलित कर सकते हैं।

लेकिन यह केवल पहली जगह में यह बचाता है अगर तुम -O विकल्प के रूप में जहाँ तक मैं देख सकता अक्तूबर केवल एक ही व्यक्ति है जो वास्तव में सवाल पढ़ सकते हैं और यह जवाब है प्रदान करते हैं