কোনও ফাইল অনুলিপি করা হচ্ছে কিনা তা বলার উপায় আছে?


4

দৃশ্যমান পরিস্থিতিটি হ'ল: মেশিন এ এর ​​ফাইল রয়েছে যা আমি মেশিন সি তে অনুলিপি করতে চাইছি মেশিন এ সরাসরি সি অ্যাক্সেস করতে পারে না, তবে মেশিন বি অ্যাক্সেস করতে পারে যা মেশিন সি অ্যাক্সেস করতে পারে আমি মেশিন এ থেকে বিতে অনুলিপি করতে স্কিপ ব্যবহার করছি, এবং তারপর বি থেকে সি পর্যন্ত।

মেশিন বিতে সঞ্চয় সীমিত রয়েছে তাই ফাইলগুলি আসার সাথে সাথে সেগুলিকে সিতে অনুলিপি করে বি থেকে মুছে ফেলতে হবে দ্বিতীয় কপিটি আরও দ্রুত, তাই এটি ব্যান্ডউইথের কোনও সমস্যা নেই।

আমি হাত দিয়ে এটি করতে পারে, কিন্তু আমি অলস। আমি যা চাই তা হ'ল বি বা সি তে একটি স্ক্রিপ্ট চালানো যা প্রতিটি ফাইল শেষ হওয়ার সাথে সাথে প্রতিটি ফাইলকে সি-তে অনুলিপি করবে । স্কিপ কাজটি এ থেকে চলছে

সুতরাং আমার যা প্রয়োজন তা জিজ্ঞাসা করার একটি উপায় (পছন্দসই বাশ স্ক্রিপ্ট থেকে) যদি ফাইল এক্স.এভিআই অনুলিপি "সম্পন্ন" হয়। এই ফাইলগুলির প্রতিটি পৃথক আকারের এবং আমি আকার বা সমাপ্তির সময়টি সত্যিই অনুমান করতে পারি না।

সম্পাদনা করুন: যাইহোক, ফাইল ট্রান্সফার সময়গুলি A থেকে B পর্যন্ত প্রায় 1 ঘন্টা এবং বি থেকে সি পর্যন্ত 10 মিনিটের কিছু হয়, যদি সময় স্কেল মোটেই গুরুত্বপূর্ণ।

উত্তর:


7

এটি করার একটি সাধারণ উপায় হ'ল প্রথমে এটি একটি অস্থায়ী ফাইলের নামটিতে কপি করা, পছন্দমত কোনও লুকানো ফাইল। অনুলিপিটি শেষ হয়ে গেলে, অনুলিপিটি সম্পাদনকারী স্ক্রিপ্টটি অ-লুকানো ফাইলের নামকরণ করে।

মেশিন বি এর স্ক্রিপ্টটি তখন অ গোপন ফাইলগুলির জন্য দেখতে পেত।

মেশিন এ এর ​​স্ক্রিপ্টটি এরকম কিছু দেখবে:

for file in `ls *` ; do
    scp $file user@host:~/.${file}.tmp
    ssh user@host "mv ~/.${file}.tmp $file"
done

যদিও এটি ওপেনের এক-লাইন ব্যবহারের ইচ্ছাটি পূরণ করে না

scp * user@host:~/

এটি একই জিনিসটি সম্পাদন করে এবং মেশিন বিটিকে পরবর্তী ফাইলটির জন্য অপেক্ষা না করে প্রতিটি ফাইল হস্তান্তর করার অনুমতি দেয়।


এর সাথে সমস্যাটি হ'ল মেশিন এআই করতে চায় scp * user@host:~/এবং অনুলিপি করা ফাইলগুলি মেশিন বিয়ের চেয়ে বেশি ফিল করতে পারে, তাই আমি এ থেকে অনুলিপি করার পরে ফাইলগুলিকে সরিয়ে / নাম পরিবর্তন করতে পারি না
মাইক কুপার

আহা, তাই যদি আমি সঠিকভাবে বুঝতে পারি, আপনি একবারে একাধিক ফাইল কপি করছেন? সমস্যাটি কোথা থেকে আসে?
জোশ

হ্যাঁ, এটাই সমস্যা। আমি বি তে সমস্ত ফাইল সঞ্চয় করতে পারি না, তবে এই অনুলিপিটি যথেষ্ট সময় নেয় যা আমি বসতে চাই না এবং প্রতিটি ফাইল শেষ করতে এবং তারপরে অনুলিপি করে এটি বেবিসিত করতে চাই না। সম্ভবত আমি আপনার প্রসারিত সংস্করণ নিয়ে যাব।
মাইক কুপার

2

lsofমেশিন বি তে কি স্ক্রিপ ফাইলটি খোলা আছে তা দেখায়? যদি তাই হয়, আপনি lsofস্কেপ ফাইলটি কখন বন্ধ করবে তা দেখতে এবং দেখতে পারতেন । যদি তা না হয় তবে আপনি ফাইলটির আকার দেখতে পারেন এবং নির্দিষ্ট সময়ের জন্য এটি পরিবর্তন না হওয়ার পরে (উদাহরণস্বরূপ 5 মিনিট), বি থেকে সিতে অনুলিপি করুন

তৃতীয় বিকল্পটি হ'ল সি থেকে একটি "ইন_প্রোগ্রেস" ডিরেক্টরিতে ফাইলগুলি অন থেকে অনুলিপি করা, এ-তে অনুলিপি শেষ হওয়ার পরে, mv"ইন_প্রোগ্রেস" ডিরেক্টরি থেকে বেরিয়ে আসার জন্য একটি কমান্ড কার্যকর করুন ।


দুর্ভাগ্যক্রমে lsofমেশিন বি তে উপস্থিত বলে মনে হচ্ছে না আপনার তৃতীয় বিকল্পটি সম্পর্কে, এটি কাজ করবে না কারণ আমি কিছু করার আগে যদি অনুলিপিটি শেষ করতে দিই, তবে আমি বিতে আমার অনুমোদিত স্থানটি বিশালভাবে ছেয়ে ফেলব (10: 1 এর মতো কিছু)। সুতরাং সমাধান যাই হোক না কেন আমি অনুলিপি সময় কাজ করতে হবে।
মাইক কুপার

অপেক্ষা 5 মিনিটের ধারণাটি একটি ভাল (আমি এরকম কিছু নিয়ে ভাবলাম) তবে এটি কীভাবে হবে তা সম্পর্কে আমি নিশ্চিত নই। কোন ধারনা?
মাইক কুপার

হ্যাঁ, আমি আপনার জন্য একটি দ্রুত এবং নোংরা রুবি লিপি লিখতে পারি - মেশিন বিতে কি রুবি রয়েছে?
জোশ

নাঃ। এটি আমার নিয়ন্ত্রণে নেই এবং আমার চেষ্টা করা এবং ব্যবহার করা কোনও জিনিস মনে হয় না। আমি আশা করছিলাম বাশ এটি করতে কিছু অন্তর্নির্মিত থাকতে পারে। যদিও আমি আমার স্থানীয় মেশিন থেকে স্ক্রিপ্টটি চালাতে সক্ষম হতে পারি ... আমি এটি নিয়ে পরীক্ষা করব।
মাইক কুপার

আমি দেখতে পাচ্ছি যে আমি একা বাশে এই জাতীয় কিছু কোড করতে পারি। আমার রুব্বি দক্ষতা আমার বাশ ক্ষমতা থেকে বেশি। stackoverflow.com এই জাতীয় স্ক্রিপ্টের সাথে সহায়তা করতে সক্ষম হতে পারে।
জোশ

2

আমি কেবল অন্য একটি, সম্পূর্ণ সম্পর্কযুক্ত বিকল্পের কথা ভেবেছিলাম। Scp মোটেও ব্যবহার করে না। এটি কাজ করে কিনা দয়া করে আমাকে জানান:

  1. বি তে, কোথাও একটি ফিফো পাইপ তৈরি করুন: এমকেফিফো / টিএমপি / এক্সফার

  2. এ-তে, পরিবর্তে স্ক্যাপ ব্যবহার করবেন না, tar -cz files | ssh B 'cat > /tmp/xfer

  3. সি তে, চালান ssh B 'cat /tmp/xfer' | tar -xz

এইভাবে, ডেটা বি তে সংরক্ষণ করা হয় না, এটি কেবল পাইপের মধ্য দিয়ে যায়। এর নেতিবাচক দিকটি হ'ল, আপনার একবারে কেবল একটি অনুলিপি থাকতে পারে ...

আপনার নিশ্চিত করা দরকার যে প্রতিবার সিটি শেষ হওয়ার প্রক্রিয়াটি শেষ হয়েছে।


আপনি যেভাবে এটি ব্যাখ্যা করেছেন এটি কাজ করে মনে হবে ... তবে এটি আমার পছন্দ হিসাবে কিছুটা "গা dark় যাদু" বলে মনে হচ্ছে। আমি মনে করি যে আরও একটি সমাধান পাওয়া গেছে যা আসল উপায়ে কাজ করে, তবে আমি অবশ্যই এই স্নিপেটটি পরে ব্যবহারের জন্য রাখব।
মাইক কুপার

এই উপায়টি সত্যিই "অন্ধকার যাদু" নয়, এটি কেবল পাইপ ব্যবহার করছে যা একটি ওএস সুবিধা। তবে আমি আপনার অন্যান্য সমাধানটিকে আরও ভাল পছন্দ করি, এটি কম কোড এবং বজায় রাখা সম্ভবত সহজ।
জোশ

ওহ, আমি কেবল এটি বোঝাতে পারি না এটি ম্যাজিক-ওয়াই কারণ আমি কখনও ফিফো পাইপ নিয়ে খেলিনি এবং এটি এমন জিনিস যা অন্যান্য জিনিসের মতো প্রায়শই ব্যবহৃত হয় না। যদিও এখন কিছু শিখতে হবে। এছাড়াও, রক্ষণাবেক্ষণ কোনও সমস্যা নয়। এটি প্রায় এক দিনের জন্য সেট আপ করা হবে।
মাইক কুপার

2

পোস্ট করা উত্তরগুলি সম্পর্কে চিন্তা করার পরে (বিশেষত @ জোশের ধারণামত পরিবর্তিত সময় দেখার ধারণার ধারণা) আমি সি-তে বি-র ফাইলগুলি চালিত করার চেষ্টা করছিলাম দেখুন, বি উপলব্ধ সরঞ্জামগুলি যতটা রক্তশূন্য, তাই কাজটি করতে সক্ষম হবে বলে মনে হচ্ছে এমন কিছুই নেই সেখানে ছিল. আমি এই সমাধান নিয়ে এসেছি। এই ধারণাটি আমার নয়, আমি এই প্রশ্নের আগে গুগল অনুসন্ধানে এটি পেয়েছি। আমি আগে এটিকে বাতিল করে দিয়েছি, যেহেতু মেশিন বিয়ের findইউটিলিটি ছিল না ।

প্রথমে বি তে যথাযথ ডিরেক্টরি সিটিতে মাউন্ট করুন, যাতে এটি স্থানীয় ফাইল সিস্টেম হিসাবে উপস্থিত হয়। আমি এটির sshfsজন্য (দুর্দান্ত উপায়, উপায় দ্বারা) ব্যবহার করেছি। এটি আমাকে বি এর পরিবর্তে সি এর ইউটিলিটিগুলি ব্যবহার করতে দেবে।

দ্বিতীয়ত, কমান্ডটি find /the/folder/* -mmin +55 মিনিটের আগে সংশোধিত সমস্ত ফাইলের সাথে মিলবে। সুতরাং কমান্ডটি find /the/folder/* -mmin +5 -exec {} /the/other/folder \;5 মিনিটের আগে সমস্ত ফাইল যা অন্য ফোল্ডারে (যা প্রকৃতপক্ষে সি-তে রয়েছে, বি থেকে মাউন্ট করা এসএসএফএসের পরিবর্তে) সমস্ত ফাইল সরিয়ে নেবে

অবশেষে, আমি আজ এবং আগামীকাল প্রতি 10 মিনিটে উপরের স্ক্রিপ্টটি চালানোর জন্য ক্রোন স্ক্রিপ্ট সেট আপ করেছি। আমার ক্রোন্তাবের লাইনটি দেখতে এমন দেখাচ্ছে

*/5 * 22,23 9 * find /the/folder/* -mmin +5 -exec mv {} /the/other/folder \;

আশা করি এটি কার্যকর হবে। পরবর্তী ফাইলটি এখনও সম্পূর্ণ হয়নি, তাই ক্রোন স্ক্রিপ্টের সাথে মিলিত হওয়ার পরে এটি সত্যিই কাজ করে কিনা সে বিষয়ে আমি মন্তব্য করতে পারি না, তবে আমি কিছু ফাইল হাতে হাতে তৈরি করে সেগুলি বীজ করে দিয়েছিলাম এবং তারা ঠিকঠাক স্থানান্তরিত করেছে। আমার আঙ্গুলের ক্রুশ দ্বারা চিহ্নিত করা

সম্পাদনা: এটি কাজ করছে, যদিও এটির প্রাথমিকভাবে কিছু ত্রুটি ছিল তবে সেগুলি এখনই সংশোধন করা হয়েছে।


এটি একটি দুর্দান্ত সমাধানের মতো শোনাচ্ছে
জোশ

1

এমকিফাইফোর দরকার নেই। মেশিন বি তে, এটি চালান:

ssh A 'tar -cz files' | ssh C 'tar -xz'

আপনি টারের-সি বিকল্পটি দরকারী খুঁজে পেতে পারেন।

আপনার যদি মেশিন এ-তে অনুলিপি শুরু করার প্রয়োজন হয় তবে কেবল এটি করুন:

tar -cz files' | ssh B "ssh C 'tar -xz'"

যদিও সঠিক উদ্ধৃতি দেওয়ার জন্য সতর্কতা অবলম্বন করুন।


0

অনুলিপিটি হয় অন্য কোনও প্রক্রিয়া হিসাবে চলবে, বা আপনি একটি সাব-শেল ব্যবহার করে এটিতে বাধ্য করতে পারেন। তারপরে, আপনি প্রক্রিয়াটি "দেখার" জন্য PS ব্যবহার করতে পারেন এবং কখন এটি অদৃশ্য হয়ে যায় তা দেখতে পারেন।

এছাড়াও, আমি বিশ্বাস করি যে * নিক্সে, ফাইলটি অনুলিপি করার সময় আপনি মুছতে পারেন। কপি প্রোগ্রামটি বন্ধ না করা পর্যন্ত সিস্টেম এটি মুছে ফেলবে না। অবশ্যই, অনুলিপিটি সফল না হলে আপনি ফাইলটি হারাবেন, তাই, সেরা ধারণাটি নয়।


পুরো কপিটি একবার হয়ে গেলে আমার কপি করার দরকার নেই, কারণ আমি অনেকগুলি ফাইল অনুলিপি করছি। প্রতিটি স্বতন্ত্র ফাইলটি কখন করা হবে তা আমার জানতে হবে।
মাইক কুপার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.