फ़ाइल को स्रोत से गंतव्य तक ले जाने के लिए rsync हो रही है?


15

क्या rsync मेरे प्रोजेक्ट के लिए एक अच्छा विकल्प है?

मुझे यह करना है:
- एसएसएच के माध्यम से स्रोत से गंतव्य फ़ोल्डर में फ़ाइलों की प्रतिलिपि बनाएं,
- सुनिश्चित करें कि सभी फ़ाइलों की प्रतिलिपि बनाई गई है,
- प्रतिलिपि के बाद स्रोत फ़ाइलों को हटा दें।
- अगर मेरा विरोध नाम है, तो मुझे फ़ाइलों का नाम बदलना होगा।

ऐसा लगता है कि मैं विकल्प का उपयोग कर सकता हूं: --remove-source-files (स्रोत फ़ाइलों को हटाने के लिए)
लेकिन rsync संघर्ष को कैसे प्रबंधित करता है, क्या मैं नियम बना सकता हूं?

मेरे प्रोजेक्ट पर केस का उपयोग करें:

मैं सर्वर ए पर वैज्ञानिक गणना चलाता हूं और परिणाम फ़ोल्डर "प्रक्रिया" में डाला जाता है, प्रत्येक गणना के लिए मेरे पास इस तरह का एक भंडार है: / प्रक्रिया / calc1।
अब मैं रिपॉजिटरी "/ calc1" को सर्वर B (I get / process / calc1) को ट्रांसफर करना चाहूंगा, और सर्वर A. से "calc1" को हटा दूंगा
... एक अन्य गणना के दौरान मुझे सर्वर A पर "/ प्रक्रिया / calc2" मिलता है। सर्वर बी पर "/ प्रक्रिया /" निर्देशिका में "calc2" को स्थानांतरित करने के लिए विचार है, तो मेरे पास अब सर्वर B पर है:
- / प्रक्रिया / calc1
- / प्रक्रिया / calc2
(और / प्रक्रिया / सर्वर A खाली है)।

यदि नई गणना के बाद सर्वर में "/ प्रक्रिया / calc1" जैसा कोई अन्य फ़ोल्डर (यदि "/ प्रक्रिया / calc1" पहले से मौजूद हो तो) rsync संघर्ष (सर्वर B पर) कैसे प्रबंधित करेगा?

क्या rsync के साथ नियम जोड़ना संभव है, और सर्वर B में "प्रक्रिया / calc1R2" द्वारा "/ प्रक्रिया / calc1" का नाम बदलना है? और इतने पर (पूर्व: calc1R3)?

धन्यवाद।

जवाबों:


11

यदि आप वास्तव में rsync का उपयोग करना चाहते हैं, तो ऐसा लगता है कि आपको --backup, --backup-dir और --suffix के कुछ संयोजन की आवश्यकता होगी। निकटतम मुझे लगता है कि आप कुछ इस तरह से मिल सकते हैं

rsync -abv --suffix R1 --remove-source-files src/ dst/

यह आप जो चाहते हैं उसके करीब होगा, लेकिन यह फ़ाइलों को बिल्कुल वैसा ही नहीं बदलेगा, जैसा आप चाहते हैं। --Suffix विकल्प एक मौजूदा फ़ाइल के अंत में पाठ को जोड़ता है, लेकिन यह केवल पहले संघर्ष के लिए ऐसा करता है। यदि आप इसे फिर से चलाते हैं, तो यह आपके पहले बैकअप को अधिलेखित कर देगा। आपको हर बार कमांड चलाने पर उस प्रत्यय का मूल्य बदलना होगा, जो कि टाइमस्टैम्प के साथ कुछ का उपयोग करने पर काम करेगा, जैसे कि:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

मुझे यकीन नहीं है कि यह आपके लिए क्या है, इसके लिए ओवरकिल है, लेकिन इसे आपकी आवश्यकताओं को पूरा करना चाहिए।


मेरे पास गणना के बाद बड़ी फाइलें हो सकती हैं, इसलिए संभवतः rsync (नेटवर्किंग समस्या के मामले में) का उपयोग करना बेहतर है।
user44782

1

जैसा कि नाम से स्पष्ट है, rsync का उपयोग फ़ाइलों को सिंक्रनाइज़ करने के लिए किया जाता है। जब "सिंक किया गया", इसका मतलब है कि स्रोत और गंतव्य पर फाइलें समान हैं। ऐसा नहीं लगता कि आप क्या करना चाहते हैं।

ऐसा लगता है जैसे आप बस कुछ फ़ाइलों को स्थानांतरित करना चाहते हैं। उसके लिए आपको rsync का उपयोग करने की आवश्यकता नहीं है। ऐसा लगता है जैसे आप एक linux या BSD का उपयोग कर रहे हैं। आप ssh पर mv -n का उपयोग कर सकते हैं। -N विकल्प मौजूदा फ़ाइलों को अधिलेखित नहीं करता है। यह 100% स्वचालित नहीं है। हालाँकि, मैं नहीं देखता कि आपके मामले में फ़ाइल पहले से ही कैसे मौजूद हो सकती है। फ़ाइलों को स्रोत से गंतव्य तक कॉपी किया जाएगा और फिर स्रोत से हटा दिया जाएगा। क्या आप फिर से उसी गणना को चलाना चाहते हैं? क्या इसीलिए आप एक ही नाम की फाइलों के साथ खत्म हो जाएंगे? मेरा सुझाव है कि फ़ोल्डर के नाम पर एक रन या बैच नंबर जोड़ना है। आप चाहते हैं कि वैसे भी स्पष्ट हो। क्या आपके पास फ़ोल्डर का नाम कैसे है इस पर कोई नियंत्रण है? कोई और जानकारी? मैं कमांड को बैश स्क्रिप्ट या समान में डालने की सलाह दूंगा।


कुछ मामलों में, मुझे उसी गणना को फिर से चलाना होगा (और इसीलिए मैं उसी नाम की फाइलों के साथ समाप्त होता हूं)। आप सही कहते हैं, किसी रन को जोड़ना एक अच्छा विचार है: कमांड एमएमवी-ए को खोजने में (मुझे आशा है कि यह ssh मोड में काम करता है, कोई पहले से ही इस कमांड लाइन का उपयोग करता है?)। फ़ोल्डर का नाम कैसे है, इस पर मेरा नियंत्रण है।
user44782

यह सबसे अधिक संभावना है कि मशीन पर स्थापित नहीं है। यदि यह आपकी मशीन है, तो आप इसे स्थापित कर सकते हैं। डेबियन आधारित: sudo apt-get Install mmv जब तक कि मध्यवर्ती स्थान (निरीक्षण, संशोधन, आदि) की आवश्यकता न हो। यदि दो मशीनों के बीच लिंक अविश्वसनीय है, तो यह निश्चित रूप से एक बुरा विचार है। पॉल का सुझाव अच्छा है। हालाँकि, प्रारंभ में रन संख्या को जोड़ना संभवतः अधिक व्यवस्थित होगा।
d -_- b

1
आप ssh पर "mv -n" का उपयोग कैसे करते हैं? आप svfs पर mv का उपयोग कर सकते हैं।
गुत्थी

ऑप्स ... हाँ, यह स्पष्ट करता है।
d -_- b

-1

SSH के लिए, संक्षेप में, इसका उपयोग करें:

दूरस्थ शेल के माध्यम से पहुंच:

खींचो: rsync [विकल्प ...] [USER @] HOST: SRC ... [DEST]

पुश: rsync [विकल्प ...] SRC ... [USER @] HOST: DEST

यह सब rsync (1) में समझाया गया है।

के रूप में यह एक cronjob के लिए स्क्रिप्टिंग के लिए, ss पर rsync स्वचालित रूप से एक पासवर्ड की आवश्यकता के बिना, ssh- एजेंट (1) में भी देखो।

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