लगभग फाइल सिस्टम में परमाणु चाल?


16

मुझे उबंटू के तहत कुछ फाइलों को एक फाइल सिस्टम से दूसरे में ले जाना है। हालाँकि, यह बहुत महत्वपूर्ण है कि फ़ाइलें गंतव्य पर आंशिक या अपूर्ण फ़ाइलों के रूप में मौजूद न हों, कम से कम सही फ़ाइल नाम के तहत नहीं।

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

हालाँकि, स्क्रिप्ट लिखना और डिबग करना ऐसा लगता है कि यह इस कार्य के लिए ओवरकिल है। क्या कोई ऐसा तरीका या उपकरण है जो पहले से ही मूल रूप से ऐसा करता है?


8
मैं एक xy समस्या महसूस करता हूं। आप इसकी आवश्यकता क्यों है?
हेनिंग - मोनिका

3
@ गेनिंग बहुत सारे संभावित कारण हैं, इसलिए यह एक अच्छा सवाल है। उदाहरण के लिए, एक प्रोग्राम जो स्वचालित रूप से एक फ़ाइल नाम के साथ फ़ाइलों को संसाधित करने का प्रयास करता है, जो एक निश्चित रेगेक्स से मेल खाता है (लेकिन नौकरशाही कारणों से अस्थायी रूप से अक्षम नहीं किया जा सकता है)। या हो सकता है कि एक बैकअप सिस्टम है जो टिकाऊ और लिखने के लिए केवल मीडिया पर फाइल और स्टोर लेता है।
wizzwizz4

1
@ जब मुझे इसकी आवश्यकता होती है क्योंकि मेरे पास कई सारे कैश हैं जो कई अलग-अलग स्टोरेज से पढ़ते हैं, लेकिन एक क्षमता के पास है और इसे सेवा से हटाने की आवश्यकता है। तदनुसार, यह आवश्यक है कि प्रत्येक फ़ाइल, यदि वह किसी भी स्थान पर मौजूद है, तो उसे पूर्ण और अक्षुण्ण होना चाहिए। अन्यथा, एक हस्तांतरण शुरू होने और समाप्त होने के बीच एक दौड़ की स्थिति मौजूद होती है जहां एक कैश अपूर्ण फ़ाइल को हड़प सकता है (और रख सकता है)।
Niels2000

जवाबों:


27

rsyncअस्थायी फ़ाइलनामों की प्रतियां (जैसे रुपी अस्थायी फ़ाइल एक्सटेंशन और rsync देखें - क्या यह स्थानांतरण के दौरान एक अस्थायी फ़ाइल बनाता है? ) जब तक आप --inplaceविकल्प का उपयोग नहीं करते हैं । फ़ाइल को सफलतापूर्वक स्थानांतरित करने के बाद ही यह उनका नाम बदल देता है। rsyncकिसी भी गंतव्य फ़ाइलों को हटाता है जो केवल आंशिक रूप से स्थानांतरित हो गए थे (जैसे डिस्क पूर्ण या अन्य त्रुटि के कारण)।

एक --remove-source-filesविकल्प भी है जो स्रोत फ़ाइल को सफलतापूर्वक स्थानांतरित करने के बाद हटाता है। देखें rsyncअधिक जानकारी के लिए आदमी पेज।

सभी को एक साथ रखकर, आप कुछ इस तरह का उपयोग कर सकते हैं:

rsync -ax --remove-source-files source/ target/

यह विकल्प विशेष रूप से "आवक" कतार या निर्देशिका के समान फाइलों को स्थानांतरित करने जैसे कार्यों के लिए उपयोगी है जहां उन्हें संसाधित किया जाएगा।

वैकल्पिक रूप से, यदि यह एक बार बंद दर्पण है, तो शायद विकल्प के rsyncबिना उपयोग करें --remove-source-files। आप बाद में स्रोत फ़ाइलों को हटा सकते हैं यदि आप चाहते हैं / की जरूरत है।


मुझे लगा कि नौकरी के लिए एक अच्छा साधन होगा। धन्यवाद!
Niels2000

@ Niels2000 मुझे याद नहीं है कि मैंने कभी भी उस rsync विकल्प का उपयोग किया है, लेकिन आप जो चाहते थे वह उस तरह की चीज की तरह लग rsyncसकता था, और मुझे पता था कि यह एक अस्थायी नाम (जब तक आप उपयोग नहीं करते --inplace) के साथ फाइल हस्तांतरित करते थे , इसलिए मैंने देखा में man rsyncऔर पाया --remove-source-filesrsyncलगभग किसी भी फ़ाइल स्थानांतरण कार्य के लिए पहले जाँच करने के लिए एक अच्छा उपकरण है।
कैस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.