फ़ाइल को नए संस्करण द्वारा प्रतिस्थापित करने के लिए दो रणनीतियाँ हैं:
नए संस्करण के साथ एक अस्थायी फ़ाइल बनाएं, फिर इसे जगह में ले जाएं।
- लाभ: यदि कोई प्रोग्राम उस फाइल को खोलता है, तो वह या तो पुरानी सामग्री या नई सामग्री को पढ़ेगा, यह इस बात पर निर्भर करता है कि उसने इस कदम से पहले या बाद में फाइल को खोला है या नहीं। कोई मिक्स-अप नहीं है।
- लाभ: दुर्घटना के मामले में, पुरानी सामग्री संरक्षित है।
- नकारात्मक पक्ष: चूंकि एक नई फ़ाइल बन जाती है, फ़ाइल की विशेषताएँ (स्वामित्व, अनुमति, आदि) संरक्षित नहीं हैं।
जगह में पुरानी फाइल को अधिलेखित करें।
- लाभ: फ़ाइल की विशेषताएँ संरक्षित हैं।
- डाउनसाइड: क्रैश की स्थिति में, फ़ाइल को आधा लिखा जा सकता है।
- डाउनसाइड: यदि किसी प्रोग्राम में फ़ाइल तब खुली होती है जब उसे अपडेट किया जा रहा हो, तो यह प्रोग्राम असंगत डेटा को पढ़ सकता है।
यदि आप कर सकते हैं, तो विधि 1 का उपयोग करें, लेकिन पहले मूल फ़ाइल की विशेषताओं को दोहराएं cp -p --attributes-only
। इसके लिए जीएनयू कोर्यूटिल्स (यानी गैर-एम्बेडेड लिनक्स, या पर्याप्त रूप से लिनक्स जैसे वातावरण) की आवश्यकता होती है। यदि आपके cp
पास नहीं है --attributes-only
, तो इस विकल्प को छोड़ दें: यह काम करेगा लेकिन यह डेटा को भी दोहराएगा।
tmp=$(mktemp)
cp -p --attributes-only "$original" "$tmp"
modifyfile "$original" "$tmp"
mv -f "$tmp" "$original"
यदि आप मौजूदा फ़ाइल की विशेषताओं को नहीं दोहरा सकते हैं, उदाहरण के लिए, क्योंकि आपके पास इस पर अनुमतियाँ हैं, लेकिन इसके स्वामी नहीं हैं और आप स्वामी को संरक्षित करना चाहते हैं, तो केवल विधि 2 संभव है। डेटा हानि के जोखिम को कम करने के लिए:
- उस विंडो को बनाएं जिसके दौरान फ़ाइल यथासंभव छोटी होगी। पहले एक अस्थायी फ़ाइल में डेटा तैयार करें, फिर इसे कॉपी करें।
- पहले पुरानी फाइल का बैकअप बना लें।
tmp=$(mktemp)
backup="${original}~"
modifyfile "$original" "$tmp"
cp -p "$original" "$backup"
cp -f "$tmp" "$original"