निर्देशिकाओं के बीच फ़ाइलों को स्थानांतरित (कॉपी नहीं) करने के लिए rsync का उपयोग करना?


54

मैं कुछ समय से फाइलों को कॉपी करने के लिए rsync का उपयोग कर रहा हूं । मेरी समझ यह है कि rsync cp से तेज है जब स्थानांतरण की कुछ फाइलें गंतव्य निर्देशिका में पहले से ही हैं, केवल वृद्धिशील अंतर (यानी "डेल्टास") को स्थानांतरित कर रही है।

यदि यह सही है, तो क्या फ़ोल्डर A की सामग्री को स्थानांतरित करने के लिए rsync का उपयोग करने से कोई लाभ होगा , कहने के लिए, एक फ़ोल्डर B , B खाली होने के साथ ?

फ़ोल्डर A में लगभग 1TB डेटा (और उसमें लाखों फाइलें) हैं। हस्तांतरण एक स्थानीय से अधिक की जाएगी नेटवर्क ( और बी पर किया जा रहा है विभिन्न फ़ाइल सिस्टम, दोनों घुड़सवार एक सुपर कंप्यूटर, जैसे पर एक है एनएफएस और बी है चमक )।

कि के अलावा, क्या झंडे मैं पूछने के लिए उपयोग करना चाहिए rsync स्थानांतरित करने के लिए (कॉपी नहीं) फ़ाइलों से एक करने के लिए बी (यानी नष्ट करने के लिए एक जब हस्तांतरण सफलतापूर्वक समाप्त हो गया)?


7
मुझे नहीं लगता कि rsyncप्रतिस्थापित कर सकते हैं mvmvजब स्रोत और गंतव्य समान फ़ाइल सिस्टम के भीतर हों, तो मैं अधिकांश फ़ाइल सिस्टम प्रकारों पर तेज़ होने की उम्मीद करूंगा , क्योंकि rsyncप्रतिलिपि बनाने के लिए कोई बात नहीं होगी, और mvशायद कुछ निर्देशिका प्रविष्टियों को बदलने के साथ दूर हो सकता है। निकटतम चीज़ जो मुझे मिल सकती rsync mvहै वह --remove-source-filesकमांड है, लेकिन यह निर्देशिकाओं को नहीं हटाती है।
jw013

1
धन्यवाद @ jw013! बस स्पष्ट करने के लिए, फाइलें विभिन्न फाइल सिस्टम पर हैं, और स्थानांतरण एक नेटवर्क पर किया जाएगा । क्या आप जानते हैं कि क्या यह अभी भी mvतेज करेगा?
एमिलियो वाज़केज़-रीना

1
खैर, mvएक नेटवर्क भर में काम नहीं कर सकता है - यह एक स्थानीय माउंट (जैसे एनएफएस) पर भरोसा करना होगा। तो टोंटी नेटवर्क है, rsyncशायद तेजी से होगा mvक्योंकि rsyncसंपीड़न कर सकते हैं।
jw013

2
वैसे यह स्रोत फ़ाइल को कॉपी करने cpका -uविकल्प है यदि यह गंतव्य फ़ाइल से नया है या जब गंतव्य फ़ाइल अनुपलब्ध है
भीड़

जवाबों:


69

आप --remove-source-filesउन्हें कॉपी करने के बजाय फ़ाइलों को स्थानांतरित करने के लिए rsync पास कर सकते हैं।

लेकिन आपके मामले में, rsync का उपयोग करने का कोई मतलब नहीं है, क्योंकि गंतव्य खाली है। एक सादा mvकाम उतनी ही तेजी से करेगा।

आपके मामले में, प्रदर्शन में क्या फर्क पड़ सकता है, यह नेटवर्क प्रोटोकॉल की पसंद है, अगर आपके पास NFS, सांबा, sshfs, sftp, ss पर rsync, ssh में टार पाइपेड, आदि के बीच कोई विकल्प है, तो इन तरीकों की सापेक्ष गति निर्भर करती है। फ़ाइल आकार, नेटवर्क और डिस्क बैंडविड्थ और अन्य कारकों पर, इसलिए सामान्य सलाह देने का कोई तरीका नहीं है, आपको अपने स्वयं के बेंचमार्क चलाने की आवश्यकता होगी।


6
सिर्फ कालेब क्या कहता है, अगर आप भ्रष्टाचार के बारे में चिंतित हैं, जैसे कि एक परतदार नेटवर्क के कारण, तो rsync समझ में आता है, क्योंकि यह हर फाइल को लिखता है, जिसे वह लिखता है।
डैनियल एस। स्टर्लिंग

5
--remove-source-filesएकमात्र स्रोत में फ़ाइलों को हटा देता। यदि आप हमारे स्रोत को साफ़ करना चाहते हैं, तो क्या आपको rsync सफलतापूर्वक चलाने के बाद स्रोत पर rm -rf (या findसभी निर्देशिका और पास -delete) नहीं करना होगा?
ट्रेवर बॉयड स्मिथ

1
@ DanielS.Sterling rsync उन्हें लिखने के बाद चेकसम ब्लॉक नहीं करता है (यह चेकसम का उपयोग करता है यह जानने के लिए कि मौजूदा फ़ाइलों के किन हिस्सों को अपडेट किया गया था और उन्हें सिंक्रनाइज़ करने की आवश्यकता है)। आप --checksumपहले सिंक्रनाइज़ेशन के परिणामों को सत्यापित करने के लिए इसे बताने के साथ एक दूसरा सिंक कर सकते हैं ।
क्लेमेंट

19

चूंकि --remove-source-filesनिर्देशिकाओं को हटाया नहीं जाता है, मैं ssh पर फ़ाइलों को स्थानांतरित करने के लिए निम्न आदेश जारी करता हूं :

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

मुझे व्यक्तिगत --progressरूप से यह सुविधा पसंद है , क्योंकि मैं यह स्थानांतरण मैन्युअल रूप से करता हूं। यदि आप किसी स्क्रिप्ट का उपयोग कर रहे हैं तो इसे हटा दें। मुझे उम्मीद है कि यह मामूली रूप से स्थानांतरण को धीमा कर देगा। findआदेश के आगे हटाएं विकल्प केवल खाली निर्देशिका हटाता है - का उपयोग नहीं करते rm -rf, क्योंकि यह गैर खाली निर्देशिका मामले में एक फ़ाइल को स्थानांतरित नहीं किया गया था हटा सकते हैं। -deleteविकल्प चालू हो जाती है -depthविकल्प ताकि खाली निर्देशिका के पेड़ "नीचे" ऊपर से नष्ट हो जाती हैं।


3
-delete-exec rmdir {} +आदि की तुलना में बहुत अच्छा है
lkraav

1
मैं तारांकन को छोड़ दूंगा क्योंकि स्थानीय स्तर पर ऐसा करने पर पथरीले / बस पथ के साथ / पीछे हो जाते हैं। यदि आप तारांकन चिह्न का उपयोग करते हैं तो छुपी हुई फ़ाइलें जैसे .htaccess या .htpasswd (यदि कोई हो) को छोड़ देगा
Svetoslav Marinov

16

सामान्य रूप में गिल्स ने कहा किrsync फ़ाइलों को स्थानांतरित करने के लिए उपयोग करने का कोई फायदा नहीं है जब mvसमान काम सरल हो जाएगा और साधारण फ़ाइल सिस्टम के बीच कोई संभावित गति प्राप्त नहीं होती है।

हालांकि कुछ समय होते हैं जब कोई फायदा होता है। विशेष रूप से, यदि आपको स्रोत, गंतव्य, या काम करने वाली मशीन की स्थिरता के बारे में कोई संदेह है, तो उपयोग करने rsyncसे आपको फिर से शुरू करने की क्षमता मिलती है। यह एक उल्लेखनीय लाभ हो सकता है यदि आप स्थानांतरण बहुत बड़े हैं और कहते हैं, आपकी पावर ग्रिड अविश्वसनीय है। Rsync का उपयोग एक विफलता की स्थिति में डेटा भ्रष्टाचार से बचने और जहां आपने छोड़ा था वहां लेने के लिए एक अधिक स्थिर तरीका होगा।


4
मैं कहूंगा कि यह बहुत बड़ा फायदा है। वास्तव में, मैं mvकेवल इतना ही कहूंगा कि यदि लक्ष्य और स्रोत समान विभाजन में हैं, तो बेहतर है कि mvकेवल प्रतिलिपि बनाने के बजाय फ़ाइल के मेटाडेटा को संपादित करें।
nomen

2
एक बार rsyncजब मुझे एमवी के बजाय ज़रूरत होती है, जब मैं फ़ोल्डर संरचना (यदि आप उपयोग करते हैं --relative) को संरक्षित करना चाहते हैं ।
श्रीधर सरनोबत

14

क्या फ़ोल्डर A की सामग्री को स्थानांतरित करने के लिए rsync का उपयोग करने से कोई लाभ होगा, कहने के लिए, एक फ़ोल्डर B, B के खाली होने के साथ?

मैंने अपने आप को ऐसी स्थिति में पाया है जहाँ rsync mv की तुलना में तेज़ है क्योंकि mv निर्देशिका में फ़ाइलों की संख्या को संभाल नहीं सकता है। मेरे पास सुरक्षा कैमरे से 1.8 मिलियन तस्वीरें हैं जो 20 दिनों तक चलती हैं और एमवी कमांड एक विफलता के साथ बाहर निकलता है क्योंकि यह संसाधनों को आवंटित नहीं कर सकता है।

rsync हालांकि, एक समस्या के बिना सभी फ़ाइलों को संभालने के लिए लगता है।


1

यदि आप निर्देशिकाओं को पुन: प्राप्त करना चाहते हैं ... एक निर्देशिका को दूसरी निर्देशिका में संभावित डुप्लिकेट निर्देशिका नामों के साथ स्थानांतरित करें , तो कृपया यहाँ मेरा जवाब serverfault.com पर देखें । mvजब एक ही नाम के साथ निर्देशिका मौजूद होती है, तो एक ख़राब काम करता है, और rsyncहर फ़ाइल को केवल स्थानांतरित करने के बजाय उन्हें (केवल लिखने के लिए मेटाडेटा पढ़ें) कॉपी करता है।


0

वास्तव में rsync का उपयोग करके फ़ाइलों को स्थानांतरित करने का कोई तरीका नहीं है जैसे लिनक्स एमवी कमांड करेगा। --Remove-source-files का उपयोग करके, आप अनिवार्य रूप से गंतव्य पर फ़ाइलों की प्रतिलिपि बना रहे हैं और फिर स्रोत से फ़ाइलों (निर्देशिकाओं को छोड़कर) को हटा रहे हैं। इससे आपका उद्देश्य फ़ाइलों को स्थानांतरित करना हो सकता है, लेकिन आप समय या i / o ऑपरेशन नहीं बचाएंगे।

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