मैं यह कैसे निर्दिष्ट कर सकता हूं कि कर्ल (कमांड लाइन के माध्यम से) एक फाइल को अधिलेखित करता है यदि यह पहले से मौजूद है?


11

मैं इस वाक्य रचना में कर्ल का उपयोग कर रहा हूँ:

curl -o myfile.jpg http://mysite.com/myfile.jpg

यदि मैं इस कमांड को दो बार चलाता हूं, तो मुझे दो फाइलें मिलती हैं:

myfile.jpg
myfile-1.jpg

मैं CURL को कैसे बता सकता हूं कि मैं चाहता हूं कि यदि यह मौजूद है तो फाइल को अधिलेखित कर दे?


6
पुन: उत्पन्न नहीं कर सकता: किस curlप्रणाली पर कौन सा संस्करण?
enzotib

जवाबों:


22

उपयोग:

curl http://mysite.com/myfile.jpg > myfile.jpg

2
और पहले से, सुनिश्चित करें कि आपके पास noclobberविकल्प सक्षम नहीं है ( set +o noclobber)।
rozcietrzewiacz

0

मैं एक ही समस्या से मिला और मैं उसी फ़ाइलनाम का पुन: उपयोग करना चाहता हूं जो भी सर्वर साइड देता है, आपके मामले में आपको फ़ाइल नाम मिल सकता है basename

➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg

तो आप एक हेल्पर बैश फ़ंक्शन लिख सकते हैं जैसे:

➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'

लेकिन मेरे मामले में फ़ाइल नाम भी यूआरएल का हिस्सा नहीं है, यह सामग्री-स्वभाव के साथ आता है; कर्ल के साथ कमांड लाइन है

$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'

-fSLयदि सर्वर पक्ष 302 पुनर्निर्देशन देता है तो आप इसे अनदेखा कर सकते हैं ; -Rसर्वर साइड टाइमस्टैम्प के लिए, सर्वर साइड -Jपर विचार करने के लिए Content-Disposition, और -Oटर्मिनल पर डंपिंग के बजाय व्यवहार डाउनलोड करने के लिए स्विच करने के लिए;

हालाँकि, यह अभी भी अधिलेखित करने से इनकार करता है यदि फ़ाइल नाम मौजूद है; मैं यह अधिलेखित करना चाहता हूं कि क्या सर्वर साइड Last-Modifiedटाइमस्टैम्प नया है;

ऐसा करने में सक्षम एक wget समाधान के साथ समाप्त होता है:

$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'

-Nसर्वर साइड tiemstamp की जाँच करें और ऊपर लिख ही जब सर्वर साइड नया संस्करण है करने के लिए है, हेडर --content-dispositionपर विचार करना है Content-Disposition; और wget का डिफ़ॉल्ट व्यवहार सर्वर साइड से दिए गए फ़ाइल नाम पर डाउनलोड करना है।

आपके मामले में, अगर आप टाइमस्टैम्प की परवाह नहीं करेंगे, तो यह बस है

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