Rsync से किसी फ़ोल्डर को बाहर कैसे करें


60

मैं अपने NAS ड्राइव पर अपने होम फोल्डर का बैकअप लेने की कोशिश कर रहा हूं। मैं यह दे रहा हूँ:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

rsync-exclude.txtयह सामग्री कहां है:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

और यह उसी फ़ोल्डर में है जिसे मैं rsync (होम फ़ोल्डर) निष्पादित करता हूं।

हालाँकि rsync इस फ़ोल्डर को कॉपी करने की कोशिश करता है, भी।

मैं क्या गलत कर रहा हूं?

जवाबों:


88

आप अपनी बहिष्कृत सूची में पूर्ण पथ प्रदान कर रहे हैं ।

Rsync के साथ, सभी बहिष्कृत (या शामिल!) पथ के साथ शुरू /होने वाले " हस्तांतरण की जड़ " के लिए लंगर डाले जाते हैं ।

इस मामले में स्थानांतरण की जड़ है /home/chris। अगर तुमने किया:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

... तो आपके बहिष्करण को काम करना चाहिए (लेकिन आप उस फाइल सिस्टम पर बाकी सब कॉपी कर रहे होंगे !)।

लेकिन जब से आप अपने होम डायरेक्टरी को सिंक करने की कोशिश कर रहे हैं , और /home/chrisनाम का कोई उपनिर्देशिका नहीं है "home/chris/Downloads", rsyncकुछ भी नहीं मिलाता है।

इसलिए /home/chrisअपनी rsync-exclude.txtफ़ाइल से भागों को हटाने का प्रयास करें ।

वास्तव में, आपको फ़ाइल में एक ही लाइन चाहिए:

/Downloads

ध्यान दें कि यदि आप अग्रणी निर्दिष्ट नहीं करते हैं /, और आपके पास अन्य निर्देशिकाओं के नाम हैं "Downloads", तो उन्हें भी बाहर रखा जाएगा। मैं मान रहा हूं कि आप केवल अपने "शीर्ष-स्तर" (स्रोत निर्देशिका के सापेक्ष, "स्थानांतरण की जड़") Downloadsनिर्देशिका को छोड़ना चाहते हैं , इसलिए आप अग्रणी चाहते हैं /

सबसे आसान रास्ता (केवल कुछ रास्तों को बाहर करने के लिए)

यदि आपको केवल एक निर्देशिका को बाहर करने की आवश्यकता है, तो बस ऐसा करें (एक अलग फ़ाइल से बचें):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

आप --excludeटैग को एक साथ चेन भी कर सकते हैं , जैसे:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

ध्यान दें कि चूंकि कोई स्लैश नहीं है, इसलिए यह किसी भी हर निर्देशिका .hiddenFileसे बाहर कर देगा जो इसे कॉपी करता है!

लेकिन अगर आपके पास कुछ बहिष्करण हैं, तो आप बेहतर --exclude-fromऔर फ़ाइल से दूर हैं।

ध्यान दें

मुझे लगता है कि आप इसे सही है, लेकिन उन rsync के लिए नए चाहिए अंत में स्लेश ध्यान दें की/home/chris/

rsyncमैन पेज को उद्धृत करने के लिए , "आप एक स्रोत पर एक अनुगामी / सोच सकते हैं 'अर्थ के रूप में इस निर्देशिका की सामग्री की प्रतिलिपि बनाएँ' के रूप में 'नाम से निर्देशिका की प्रतिलिपि बनाने के लिए विरोध किया।"

इसलिए यदि आप उस अनुगामी स्लैश को छोड़ देते हैं, तो आप chrisलक्ष्य निर्देशिका के भीतर एक निर्देशिका के साथ समाप्त हो जाएंगे , जिसमें/home/chris (मूल Downloadsनिर्देशिका को छोड़कर) से सब कुछ शामिल है !)।


2

यह आंखों पर आसान हो सकता है, और निर्देशिका और सिंटैक्स को छोड़कर सिर्फ एक नोट:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

यह उन निर्देशिकाओं और उनके भीतर की सभी फाइलों को बाहर कर देगा। जो भी कारण के लिए, rysnc / home / username को /.cache में संलग्न नहीं कर रहा था। केवल घर / खुद ही लंगर डालेगा, इसलिए मुझे प्रत्येक बहिष्कृत निर्देशिका में उपयोगकर्ता नाम जोड़ना होगा।

मैन पेज कहते हैं, "यदि पैटर्न / के साथ शुरू होता है, तो यह फाइलों के पदानुक्रम में किसी विशेष स्थान के लिए लंगर डाला जाता है, अन्यथा यह पथनाम के अंत के खिलाफ मिलान किया जाता है।" लेकिन, वह पदानुक्रम स्रोत निर्देशिका में केवल पहली निर्देशिका प्रतीत होती है। मैं बैश का उपयोग कर रहा हूँ, संस्करण 4.4.23 (1) -release।

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