संपादक एक फ़ाइल को बचाने के लिए कई रणनीतियों का पालन कर सकते हैं। दो प्रमुख वेरिएंट मौजूदा फ़ाइल को अधिलेखित करने, या एक नई फ़ाइल में लिखने और इसे स्थानांतरित करने के लिए हैं। एक नई फ़ाइल में लिखना और इसे जगह में ले जाना अच्छी संपत्ति है कि किसी भी समय, फ़ाइल से पढ़ने से आपको फ़ाइल का एक पूर्ण संस्करण मिलता है (एक पुराने को तुरंत, अगले को नया एक)। यदि फ़ाइल को जगह में अधिलेखित किया जाता है, तो एक समय होता है, जिसके दौरान यह अधूरा होता है, जो समस्याग्रस्त होता है यदि कोई अन्य प्रोग्राम इसे अभी एक्सेस करता है या यदि सिस्टम क्रैश होता है।
नैनो स्पष्ट रूप से मौजूदा फ़ाइल को अधिलेखित करती है। आपकी स्क्रिप्ट उस बिंदु का पता लगाती है जब यह लिखना समाप्त हो जाता है ( close_write
घटना) और rsync
उस बिंदु पर चलता है । ध्यान दें कि rsync के लिए फ़ाइल के अधूरे संस्करण को हथियाना संभव है, यदि आप त्वरित उत्तराधिकार में दो बार बचत करते हैं, तो इससे पहले कि rsync ने पहली बचत से अपना काम पूरा कर लिया है।
दूसरी ओर विम, राइट-टू-मूव रणनीति का उपयोग करता है - जिसके प्रभाव के लिए कुछ
echo 'new content' >somefile.new
mv -f somefile.new somefile
फ़ाइल के पुराने संस्करण का क्या होता है, यह उस बिंदु पर हटा दिया जाता है जहां नया संस्करण जगह में ले जाया जाता है। इस बिंदु पर, inotifywait
कमांड वापस आती है, क्योंकि यह बताया गया है कि फ़ाइल अब मौजूद नहीं है। (नया somefile
एक ही नाम के साथ एक अलग फ़ाइल है।) यदि विम को एक बैकअप फ़ाइल बनाने के लिए कॉन्फ़िगर किया गया था, तो क्या होगा कुछ ऐसा है
echo 'new content' >somefile.new
ln somefile somefile.old
mv -f somefile.new somefile
और inotifywait
अब बैकअप देख रहा होगा।
फाइल सेव स्ट्रेटेजीज के बारे में अधिक जानकारी के लिए, देखें कि प्रोग्राम चलाते समय लाइव अपडेट करना कैसे संभव है? और फ़ाइल अनुमतियाँ और बचत
विम को ओवरराइट रणनीति का उपयोग करने के लिए कहा जा सकता है: backupcopy
विकल्प बंद करें ( :set nobackupcopy
)। यह जोखिम भरा है, जैसा कि ऊपर बताया गया है।
दोनों सहेजने की रणनीतियों को संभालने के लिए, निर्देशिका देखें और दोनों के लिए close_write
और moved_to
घटनाओं को फ़िल्टर करें somefile
।
inotifywait -m -e close_write,moved_to --format %e/%f . |
while IFS=/ read -r events file; do
if [ "$file" = "somefile" ]; then
…
fi
done