rsync: ऐसी फ़ाइलों को हटाने से बचें जो किसी निश्चित उपयोगकर्ता से संबंधित नहीं हैं


1

मैं अपने लैपटॉप के साथ एक बड़े साझा दस्तावेज़ फ़ोल्डर को रखने के लिए rsync का उपयोग कर रहा हूं। अधिक विशेष रूप से, मैं अपने लैपटॉप से ​​साझा रेपो में rsyncing कर रहा हूं। मैं क्या करना चाहूंगा केवल उन फाइलों को rsyncing कर रहा है जो मेरे उपयोगकर्ता द्वारा बनाए / संशोधित किए गए हैं। एक साझा भंडार होने के नाते अन्य लोगों ने अन्य निर्देशिका या फाइलें बनाई हो सकती हैं।

मैंने विभिन्न rsync विकल्पों के माध्यम से ब्राउज़ किया है, लेकिन मुझे वह नहीं मिला, जिसकी मुझे तलाश है। मैं फ़ाइल नाम से मिलान करने के लिए केवल --excludeया --delete-excludedकेवल पैटर्न दे सकता हूं , किसी अन्य मेटाडेटा (या क्या मैं?) को नहीं।

एक वैकल्पिक, लेकिन कुछ हद तक बोझिल समाधान की तरह एक दूरस्थ स्क्रिप्ट लॉन्च किया जा सकता है find -not -perm $USER > excluded_filesऔर rsync को छोड़कर, लेकिन मैं ऐसा नहीं करूंगा।

कोई विचार?

अद्यतन: स्पष्ट करने के लिए, मेरे लैपटॉप का डेटा सर्वर पर डेटा का केवल एक हिस्सा होगा। यहाँ एक उदाहरण है

  • मेरा लैपटॉप शामिल है dir_1औरdir_2
  • मैं उन्हें सर्वर पर rsync करता हूं; अब सर्वर में दो dirs होते हैं
  • एक अन्य उपयोगकर्ता सर्वर पर लॉग इन करता है और एक नई निर्देशिका बनाता है dir_3
  • मैं अपनी फ़ाइलों के साथ गड़बड़ करता हूं, अब फिर से rsync करेगा लेकिन उपयोग करने की आवश्यकता है --delete
  • मैं केवल फ़ाइलें है कि मैं पहली जगह पर बनाया --delete करना चाहते हैं, उन पर IE dir_1और dir_2, नहीं dir_3

अन्य लोगों ने आपके फ़ोल्डर्स के अंदर फाइलें बनाई हो सकती हैं? आप लोरेंजोग नामक एक फ़ोल्डर क्यों नहीं बनाते हैं जो कोई और नहीं लिखता है?
user39559

@lorenzog: आपका वर्कफ़्लो अजीब लगता है: जैसा कि मैं इसे समझता हूं, आपके पास आपके लैपटॉप पर फाइलें हैं जो आपके स्वामित्व में नहीं हैं, और आप केवल उन फाइलों को कॉपी करना चाहते हैं जो आपके पास साझा रिपॉजिटरी के स्वामित्व में हैं। क्या यह सही है? क्या आप कभी भी दूसरी दिशा में फ़ाइलों की नकल करते हैं?
गिल्स

मुझे स्थिति को बेहतर तरीके से समझाना चाहिए। संपादित देखें
लोरेंजोग

और अन्य उपयोगकर्ता dir_1 और dir_2 के अंदर फ़ाइलें नहीं बनाएंगे?
user39559

@ user39559, हां, वे ऐसा कर सकते हैं, और इसीलिए मैं उम्मीद कर रहा था कि rsync उन फाइलों का पता लगा सकता है और मुझे उन्हें हटाने से रोक सकता है।
लॉरेंजॉग

जवाबों:


1

मैं मानता हूं कि आपके लैपटॉप पर सभी फाइलों की एक प्रति रखना एक विकल्प नहीं है। अन्यथा, यह बहुत आसान होगा।

यहाँ सही उपकरण एक संस्करण नियंत्रण उपकरण है। लेकिन मुझे एहसास है कि जब तक सभी उपयोगकर्ताओं के पास तकनीकी परिष्कार की एक न्यूनतम मात्रा नहीं होती है, तब तक उन्हें संस्करण नियंत्रण उपकरण का उपयोग करना एक यथार्थवादी सुझाव नहीं है। और फिर भी आपको अपने लैपटॉप पर जो भी चेक आउट करना है उसे सावधानी से करना होगा।

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


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

दुर्भाग्य से, यूनिसन के पास स्वामी द्वारा फ़ाइलों को अनदेखा करने का कोई विकल्प नहीं है, rsync से अधिक कोई भी करता है। आप के साथ एक अनदेखा सूची उत्पन्न कर सकते हैं find -user, लेकिन यह गड़बड़ हो जाता है, और दौड़ की स्थिति है अगर कोई और जोड़ता है या चलाने के बीच फ़ाइलों को हटाता findहै unisonया rsync

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


आप फाइल सिस्टम का एक दृश्य बना सकते हैं जिसमें केवल आपकी फाइलें हैं। मेरे पास पूर्ण, निर्बाध समाधान नहीं है, लेकिन यहां कुछ विचार आरंभ करने के लिए हैं।

  • यदि साझा मशीन हार्ड लिंक का समर्थन करती है (सभी यूनियन्स करते हैं, और जब तक आप NTFS का उपयोग करते हैं, तो NT4 से विंडोज करता है), यह रिपॉजिटरी की एक कॉपी बनाने के लिए काफी आसान है जिसमें आपकी फ़ाइलों के केवल हार्ड लिंक होते हैं:

    cd /shared/repository
    find . -user "$USER" -exec sh -c 'mkdir -p "/my/view/${0%/*}" &&
                                  ln "$0" "/my/view/$0"' {} \;
    

    या zsh के साथ:

    autoload zmv
    zmv -L -Q '/shared/repository/(**/)(*)(u$UID)' "/my/view/$1$2"
    

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

  • यदि साझा मशीन FUSE का समर्थन करती है , तो आप इसका उपयोग केवल अपनी फ़ाइलों वाले साझा भंडार के लाइव दृश्य को बनाने के लिए कर सकते हैं। मैं किसी भी मौजूदा FUSE फाइल सिस्टम के बारे में नहीं जानता, जो यह कर सकता है, लेकिन बाइंडफॉफ़ करीब आता है (मैंने कोडिंग कठिनाई का मूल्यांकन करने के लिए कोड को नहीं देखा है)।

  • आप rsync या unison चलाते समय LD_PRELOADओवरराइड readdir(या विंडोज समतुल्य) का उपयोग कर सकते हैं , ताकि यह केवल आपके द्वारा स्वामित्व वाली फ़ाइलों को लौटाए।


प्रतिभाशाली। लिंक के लिए धन्यवाद, इसकी मौजूदगी के बारे में नहीं जानता था। संस्करण नियंत्रण अब एक विकल्प नहीं था जब हमने बड़ी वस्तुओं (2 जीबी फिल्में, विभिन्न Microsoft कार्यालय दस्तावेज़ों को उन में बड़ी छवियों के साथ, और इसी तरह) अपलोड करना शुरू किया।
लॉरेंजॉग

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

@ user39559: दोह, आप सही कह रहे हैं। मैं सामान्य रूप से दो-तरफा सिंक्रनाइज़ेशन के लिए यूनिसन का उपयोग करने की मेरी सिफारिश से खड़ा हूं, लेकिन यह वास्तव में लॉरेंज की समस्या को हल नहीं करता है। केवल नाम से फ़ाइलों की अनदेखी का समर्थन करता है। मुझे इसके बारे में कुछ और सोचने दें ...
गिले

अच्छा समाधान! लेकिन अगर आप हार्ड लिंक बनाते समय इनोड में कोई भी बदलाव करते हैं, तो Unison शायद सब कुछ फिर से स्कैन करेगा और सेकंड के बजाय घंटों ले जाएगा, सर्वर पर भारी शुल्क लगाएगा। ईमानदारी से, यह बहुत ही कठिन सेटिंग है, जहां कोई व्यक्ति अन्य लोगों के साथ इतनी आसानी से फ़ोल्डर साझा करना चाहता है, लेकिन केवल अपनी फ़ाइलों को मिरर करता है।
user39559
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.