wget -o विफलता पर खाली फाइलें लिखता है


15

अगर मैं wget "no no address" -o "test.html" लिखता हूं तो यह सबसे पहले test.html बनाता है और विफलता के मामले में इसे खाली छोड़ देता है। हालांकि, जब -o का उपयोग नहीं किया जाता है, तो यह देखने के लिए इंतजार करना होगा कि क्या डाउनलोड सफल होता है और उसके बाद ही यह फाइल लिखेगा।

मैं बाद के व्यवहार को -o पर भी लागू करना चाहूंगा, क्या यह संभव है?

जवाबों:


17

wget URL नहीं मिलने पर एक गैर-शून्य निकास स्थिति लौटाता है, इसलिए आप विफलता पर एक हटाए गए आदेश को जोड़ सकते हैं:

wget "url" -O file || rm -f file

या एक अस्थायी फ़ाइल बनाएं और केवल उसे वहीं स्थानांतरित करें जहाँ आप सफलता चाहते हैं:

wget "url" -O /tmp/wget && mv /tmp/wget file

विफलता पर मौजूदा फ़ाइल को नहीं हटाने का दूसरा लाभ है, लेकिन man tempfileयदि आप समानांतर में कई उदाहरण चला रहे हैं तो अद्वितीय अस्थायी नामों (देखें ) का उपयोग करना सुनिश्चित करें ।


इसके अलावा, --retry-conrefused को जोड़ने से पहली जगह में खाली फ़ाइल को रोकने में मदद मिल सकती है।
एकोम डेम

यदि यह कठपुतली मेनिफेस्ट में निष्पादित हो रहा है , तो = = फ़ाइल को तब तक बदलना है जब तक => "[-s फ़ाइल]" इसे आत्म-चिकित्सा नहीं बना सकता।
एकोम

14

जैसा कि टिप्पणियों में लिखा गया है, wget -O शेल पुनर्निर्देशन की तरह अधिक है जो हमेशा त्रुटियों की परवाह किए बिना फाइल में लिखता है।

आप curl -fइसके बजाय उपयोग कर सकते हैं :

curl -f http://nonexistent/file.jpg -o localfile.jpg

यदि फ़ाइल को लाने में कोई त्रुटि है तो यह स्थानीय फ़ाइल को स्पर्श नहीं करेगा।


4

सही सिंटैक्स है

wget "url" -O file

UPPERCASE O पर ध्यान दें। -o विकल्प एक लॉग फ़ाइल लिखना भूल जाते हैं , इसीलिए यह हमेशा विफलता पर भी लिखा जाता है।


पहले मुझे लगा कि यह काम कर रहा है, लेकिन फिर मैंने पाया कि यह नहीं है। wget " host.does.not.exist " -O "vacFile" आज़माएं एक त्रुटि लौटा दी गई है, फिर भी रिक्त फ़ाइल बनाया गया है।
एक्यूरेटर

1
@akurtser आप सही कह रहे हैं। मुझे लगता है कि फ़ाइल बनाने के लिए नहीं बताने का कोई तरीका नहीं है। मुझे यह धागा मिला: mail-archive.com/wget@sunsite.dk/msg08586.html जिसमें वे इस मामले पर चर्चा करते हैं। आधार रेखा यह है कि आप एक ही फ़ाइल के लिए MULTIPLE डाउनलोड कर सकते हैं ताकि यह बन जाए क्योंकि wget को श्योर नहीं किया जा सकता है कि सभी यूआरएल विफल हो जाएंगे।
श्री शुनज

अच्छी तरह से धन्यवाद, यह एक बैश स्क्रिप्ट का एक हिस्सा है जो मैं लिख रहा हूं, इसलिए मैं इसे पहले एक अस्थायी फ़ाइल सहेजने की कोशिश करूंगा, जो सफल डाउनलोड के मामले में, नाम बदला जाएगा। बहुत सुंदर नहीं है, लेकिन कुछ भी बेहतर नहीं सोच सकता।
एक्यूरेटर जूल

1
@akurtser निश्चित रूप से आप wget से रिटर्न कोड की जांच कर सकते हैं ... यह आपको बताना चाहिए कि क्या आप "यदि मिला है" फ़ाइल को हटा सकते हैं। इसलिए अस्थायी / नाम बदलने की कोई आवश्यकता नहीं है।
श्री शुनज

1
-ओ विकल्प एक पुनर्निर्देशन है, जो किसी सामग्री के न होने पर भी किसी फ़ाइल में डाउनलोड की गई सामग्री को रीडायरेक्ट करता है। इसलिए, एक फ़ाइल हमेशा बनाई जाती है, भले ही डाउनलोड विफल हो।
क्वान टू

0

हेल्प डॉक (wget -h) के अनुसार, आप डाउनलोड (संस्करण 1.14) को स्किप करने के लिए --spider विकल्प का उपयोग कर सकते हैं।

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.