কার্ল ব্যবহার করে এফটিপি এর মাধ্যমে একাধিক ফাইল আপলোড করা হচ্ছে


14

আমি কার্ট ব্যবহার করে এফটিপি-র মাধ্যমে বর্তমান ফোল্ডারের মধ্যে থাকা সমস্ত পাঠ্য ফাইল আপলোড করার চেষ্টা করছি। আমি নিম্নলিখিত লাইনের চেষ্টা করেছি:

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

যেখানে XXX হ'ল সার্ভারের আইপি ঠিকানা এবং YYY হল ব্যবহারকারীর নাম এবং পাসওয়ার্ড।

আমি সার্ভারে file1.txt সাফল্যের সাথে স্থানান্তর করতে সক্ষম হয়েছি, তবে এটি 'ফাইল_নাম' খুলতে পারে না বলে দ্বিতীয় ফাইলটি সম্পর্কে অভিযোগ করে! '

আমি ফাইলের নামগুলি অদলবদল করেছি এবং এটি file2.txt এর জন্য কাজ করেছে এবং ফাইল1.txt নয়। মনে হচ্ছে আমি সিনট্যাক্সটি ভুল পেয়েছি, তবে ম্যানুয়ালটি কী বলে?

এছাড়াও, আদর্শভাবে আমি এই জাতীয় কিছু করতে সক্ষম হব:

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

কারণ আমি সর্বদা বর্তমান ফোল্ডারে টিএসটি ফাইলের নাম বা স্থানান্তরিত হওয়ার জন্য ফাইলগুলির সংখ্যা জানব না।

আমি মতামত করছি আমার একটি বাশ স্ক্রিপ্ট লিখতে হতে পারে যা আউটপুটটিকে ls *.txtএকটি অ্যারের মধ্যে সংগ্রহ করে এবং কার্ল দ্বারা প্রয়োজনীয় মাল্টিপল-ফাইল-ফর্ম্যাটে রেখে দিতে পারে।

আমি এর আগে বাশ স্ক্রিপ্টিং করিনি - এটি অর্জনের এটি কি সহজতম উপায়?

উত্তর:


20

আপনার প্রথম কমান্ডটি সাদা স্থান ছাড়াই কাজ করা উচিত:

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

উপরের ইউআরএলগুলিতে অনুগ্রহ করে "/" নোট করুন।

বিকল্প "-T" সম্পর্কে এটি কার্লের ম্যানুয়াল এন্ট্রি:

-টি, - আপলোড-ফাইল

এটি নির্দিষ্ট স্থানীয় ফাইলকে দূরবর্তী URL এ স্থানান্তর করে। যদি নির্দিষ্ট ইউআরএলে কোনও ফাইল অংশ না থাকে তবে কার্ল স্থানীয় ফাইলের নাম সংযোজন করবে। নোট করুন যে কোনও ফাইলের নাম বা কার্ল নেই তা কার্ল প্রমাণ করার জন্য আপনার অবশ্যই শেষ ডিরেক্টরিতে একটি চলন্ত / ব্যবহার করতে হবে যাতে আপনার শেষ ডিরেক্টরি নামটি ব্যবহার করা দূরবর্তী ফাইলের নাম is এটি সম্ভবত আপলোড অপারেশন ব্যর্থ হতে পারে। এটি যদি কোনও HTTP (এস) সার্ভারে ব্যবহৃত হয়, তবে PUT কমান্ডটি ব্যবহৃত হবে।

প্রদত্ত ফাইলের পরিবর্তে স্ট্যান্ডিন ব্যবহার করতে "-" (একক ড্যাশ) ফাইলের নাম ব্যবহার করুন। পর্যায়ক্রমে, ফাইলের নাম ""। (একক সময়কাল) স্ট্যান্ডিন আপলোড হওয়ার সময় সার্ভারের আউটপুট পড়ার অনুমতি দেওয়ার জন্য অ-ব্লকিং মোডে "-" পরিবর্তে নির্দিষ্ট করা যেতে পারে specified

আপনি কমান্ড লাইনে প্রতিটি URL- এর জন্য একটি-টি নির্দিষ্ট করতে পারেন। প্রতিটি-টি + ইউআরএল জুড়ি কী আপলোড করতে হবে এবং কোথায় তা নির্দিষ্ট করে। কার্ল টি-টি আর্গুমেন্টের "গ্লোব্বিং" কেও সমর্থন করে যার অর্থ আপনি ইউআরএলগুলিতে সমর্থিত একই ইউআরএল গ্লোব্বিং স্টাইল ব্যবহার করে একক ইউআরএল একাধিক ফাইল আপলোড করতে পারেন:

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

অথবা এমনকি

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

"* .txt" সম্প্রসারণ কাজ করে না কারণ কার্ল ইউআরএলগুলির জন্য কেবল একই বাক্য গঠন সমর্থন করে:

এই হিসাবে বন্ধনী হিসাবে অংশ সেট লিখে আপনি একাধিক URL বা URL এর অংশ নির্দিষ্ট করতে পারেন:

http: // সাইট । {এক, দুই, তিন}। কম

অথবা আপনি [] যেমনটি ব্যবহার করে অক্ষরবৃত্তীয় সিরিজের ক্রমগুলি পেতে পারেন:

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

ftp://ftp.numericals.com/filemitted001-100 + টেক্সট (শীর্ষস্থানীয় জিরো সহ)

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

[...]

কমান্ড লাইন প্রম্পট থেকে যখন অনুরোধ করা হয় তখন [] বা {ences অনুক্রমগুলি ব্যবহার করার সময় শেলটি এতে হস্তক্ষেপ না করার জন্য আপনাকে পুরো URL টি ডাবল উদ্ধৃতিতে রেখে দিতে হবে। এটি বিশেষরূপে ব্যবহৃত অন্যান্য অক্ষরের জন্যও যায়, যেমন '&', '?' এবং '*'.

তবে আপনি "নরমাল" শেলটি এর মতো গ্লোববিং ব্যবহার করতে পারেন:

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

(শেষ উদাহরণটি সমস্ত শেল বা কোনও ধরণের বিদেশী ফাইলের নাম সহ কার্যকর নাও হতে পারে))


$(perl -e 'print join(",",@ARGV)' *.txt)স্পেস সহ ফাইলের নামগুলি সঠিকভাবে পরিচালনা করবে।
ivan_pozdeev
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.