कर्ल का उपयोग करके एफ़टीपी के माध्यम से कई फाइलें अपलोड करना


14

मैं वर्तमान फ़ोल्डर के भीतर कर्ल का उपयोग करके सर्वर स्थान पर FTP के माध्यम से सभी पाठ फ़ाइलों को अपलोड करने का प्रयास कर रहा हूं। मैंने निम्नलिखित पंक्ति आज़माई:

 curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY

जहां XXX सर्वर का IP पता है और YYY उपयोगकर्ता नाम और पासवर्ड है।

मैं सफलतापूर्वक सर्वर पर file1.txt को स्थानांतरित करने में सक्षम हूं, लेकिन यह दूसरी फाइल के बारे में शिकायत करता है जिसमें कहा गया है कि '' file__ 'नहीं खोल सकते!'

मैंने फ़ाइल नामों की अदला-बदली की और यह file2.txt के लिए काम किया और file1.txt से नहीं। ऐसा लगता है कि मुझे वाक्य रचना गलत लगी है, लेकिन यह मैनुअल क्या कहता है?

इसके अलावा, आदर्श रूप से मैं ऐसा कुछ कर पाऊंगा:

 curl -T *.txt ftp://XXX --user YYY

क्योंकि मुझे वर्तमान फ़ोल्डर में txt फ़ाइलों के नाम या स्थानांतरित होने वाली फ़ाइलों की संख्या का पता नहीं चलेगा।

मुझे लगता है कि मुझे एक बैश स्क्रिप्ट लिखनी पड़ सकती है जो ls *.txtएक सरणी में आउटपुट को इकट्ठा करती है और इसे कर्ल द्वारा आवश्यक कई-फाइलों-प्रारूप में डालती है।

मैंने इससे पहले बैश स्क्रिप्टिंग नहीं की है - क्या इसे प्राप्त करने का सबसे सरल तरीका है?

जवाबों:


20

आपका पहला आदेश बिना व्हाट्सएप के काम करना चाहिए:

curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY

उपरोक्त URL में "/" अनुगामी भी नोट करें।

यह कर्ल के मैनुअल प्रविष्टि "विकल्प -T" के बारे में है:

-टी, --अपलोड-फाइल

यह निर्दिष्ट स्थानीय फ़ाइल को दूरस्थ URL पर स्थानांतरित करता है। यदि निर्दिष्ट URL में कोई फ़ाइल भाग नहीं है, तो कर्ल स्थानीय फ़ाइल नाम को जोड़ देगा। ध्यान दें कि आपको कर्ल को वास्तव में साबित करने के लिए एक अनुगामी / अंतिम निर्देशिका का उपयोग करना चाहिए कि कोई फ़ाइल नाम नहीं है या कर्ल यह सोचेंगे कि आपके अंतिम निर्देशिका नाम का उपयोग करने के लिए दूरस्थ फ़ाइल नाम है। यह सबसे अधिक संभावना है कि अपलोड ऑपरेशन विफल हो जाएगा। यदि यह एक HTTP (S) सर्वर पर उपयोग किया जाता है, तो PUT कमांड का उपयोग किया जाएगा।

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

आप कमांड लाइन पर प्रत्येक URL के लिए एक-टी निर्दिष्ट कर सकते हैं। प्रत्येक -T + URL जोड़ी निर्दिष्ट करती है कि क्या अपलोड करना है और कहां पर है। कर्ल भी -T तर्क के "ग्लोबिंग" का समर्थन करता है, जिसका अर्थ है कि आप URL में समर्थित एक ही URL ग्लोबिंग शैली का उपयोग करके एक ही URL पर कई फाइलें अपलोड कर सकते हैं:

curl -T "{file1,file2}" http://www.uploadtothissite.com

या और भी

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

* ".txt" विस्तार काम नहीं करता है क्योंकि यूआरएल के लिए कर्ल केवल एक ही सिंटैक्स का समर्थन करता है:

आप ब्रेसिज़ के भीतर भाग सेट लिखकर कई URL या URL के कुछ भाग निर्दिष्ट कर सकते हैं:

http: // साइट । {एक, दो, तीन} .com

या आप अल्फ़ान्यूमेरिक श्रृंखला के अनुक्रम प्राप्त कर सकते हैं जैसे कि [] का उपयोग करके:

ftp://ftp.numericals.com/file[1-100].txt

ftp://ftp.numericals.com/file पर I001-100acing.txt (अग्रणी शून्य के साथ)

ftp://ftp.letters.com/file[az].txt

[...]

कमांड लाइन प्रॉम्प्ट से आह्वान करने पर [] या {} अनुक्रमों का उपयोग करते समय, आपको संभवतः शेल से बचने के लिए शेल से बचने के लिए पूर्ण उद्धरण को दोहरे उद्धरण चिह्नों के भीतर रखना होगा। यह विशेष व्यवहार किए गए अन्य पात्रों के लिए भी जाता है, जैसे '&', '?' तथा '*'।

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

curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY

(अंतिम उदाहरण सभी गोले या किसी भी प्रकार की विदेशी फ़ाइल नामों के साथ काम नहीं कर सकता है।)


$(perl -e 'print join(",",@ARGV)' *.txt)सही ढंग से रिक्त स्थान के साथ फ़ाइल नाम संभालेंगे।
ivan_pozdeev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.