RSYNC को सिंगल फाइल कैसे करें?


95

वर्तमान में मैं केवल RSync-ing इस Directoriesप्रकार है:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

तो मैं कैसे rsyncएक एकल फ़ाइल पसंद करते हैं /var/www/public_html/.htaccess,?

जवाबों:


160

आप इसे उसी तरह करते हैं जैसे आप एक निर्देशिका करते हैं, लेकिन आप स्रोत के रूप में फ़ाइलनाम के लिए पूर्ण पथ निर्दिष्ट करते हैं। आपके उदाहरण में:

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

19
अगर आप केवल एक फाइल भेज रहे हैं तो आप "--प्रोग्रेस" पैरामीटर जोड़ना चाहते हैं ताकि आप देख सकें कि यह प्रगति है।
जोश स्ट्रेंज

इसका मतलब यह है कि आपको अभी भी फ़ाइल के ऊपर एक निर्देशिका के साथ rsyncd.conf में एक मॉड्यूल की आवश्यकता है (उदाहरण के लिए, विकल्प को हटाने के साथ हटाएं), या क्या आप सर्वर पर कहीं भी फाइल अपलोड कर सकते हैं यह निर्दिष्ट करके पथ है? मैन पेज वास्तव में उस बारे में स्पष्ट नहीं है।

2
-a में पुनरावर्ती शामिल है और यह सुनिश्चित करने के लिए एक फ़ाइल की आवश्यकता नहीं है कि क्या मैं एकल फ़ाइल के लिए उस ध्वज का उपयोग नहीं करूंगा क्योंकि यह अनपेक्षित व्यवहार को जन्म दे सकता है यदि दुर्घटना से फ़ाइल नाम एक निर्देशिका बन जाता है।
लालनिमलवार

2
--partial --stats --progress << अगर ये एक बहुत बड़ी फाइल है तो ये झंडे मददगार हैं और टूटे हुए ट्रांसफर के बाद इसे फिर से शुरू किया जा सकता है।
अही टूना


14

माइकल प्लेस का जवाब बहुत अच्छा काम करता है, यदि स्रोत और लक्ष्य दोनों के लिए रूट निर्देशिका के सापेक्ष, फ़ाइल के पथ में सभी निर्देशिका पहले से मौजूद हैं।

लेकिन क्या होगा अगर आप इस स्रोत पथ के साथ किसी फ़ाइल को सिंक करना चाहते हैं:

/ स्रोत-रूट / a / b / फ़ाइल

निम्नलिखित लक्ष्य पथ के साथ एक फ़ाइल के लिए:

/ लक्ष्य-रूट / a / b / फ़ाइल

और निर्देशिका और बी मौजूद नहीं है?

आपको निम्नलिखित की तरह एक rsync कमांड चलाने की आवश्यकता है:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]

2
क्या यह केवल एक मौजूदा फ़ोल्डर में अलग-अलग फ़ाइल की प्रतिलिपि बनाने या अग्रिम में फ़ोल्डर्स बनाने के लिए सुरक्षित नहीं होगा? फ़ोल्डर या फ़ोल्डर सामग्री सिंकिंग के मामले में, rsync सभी सबफ़ोल्डर्स बनाता है, आखिरकार यह इसका काम है, लेकिन इस विशेष मामले में यह बहुत अधिक परेशानी है और सिर्फ फाइल को अलग करने के लिए --include मापदंडों को मुश्किल बना देता है।
ट्यूलेंस कोर्डोवा

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

0

तिथि करने के लिए, दो उत्तर बिल्कुल सही नहीं हैं, वे एक से अधिक फ़ाइल प्राप्त करेंगे, और दूसरा उतना सरल नहीं है जितना कि यह हो सकता है, यहां एक सरल उत्तर IMO है।

निम्नलिखित को एक फ़ाइल मिलती है, लेकिन आपको mddir के साथ डिस्टेंस डायरेक्टरी बनानी होगी। यह शायद सबसे तेज़ विकल्प है:

mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/

यदि फ़ाइल का केवल एक उदाहरण / दूरस्थ / पथ में है, तो rsync आपके लिए निर्देशिका बना सकता है यदि आप निम्न कार्य करते हैं। यह शायद थोड़ा और समय लेगा क्योंकि यह अधिक निर्देशिकाओं को खोजता है। साथ ही यह उन निर्देशिकाओं के लिए खाली निर्देशिका बनाएगा जो / दूरस्थ / पथ में नहीं हैं

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

ध्यान रखें कि --include और --exclude का क्रम मायने रखता है।

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