क्या स्थानांतरित करने के बजाय हमेशा कॉपी और डिलीट करना बेहतर है?


18

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

मुझे हमेशा एहसास होता है, कुछ टाइप करने के बाद mv verybigdir dest, कि मुझे शायद टाइप करना चाहिए cp -R verybigdir dest  &&  rm -R verybigdir(जहां &&ऑपरेटर अगले कमांड पर तभी आगे बढ़ता है, जब पहले सफल था) - या क्या यह व्यर्थ है? क्या होता है, वास्तव में, जब मैं एक चाल से Ctrl+ Cआधा रास्ता दबाता हूं ? इसी तरह, जब मैं रद्द बटन दबाता हूं तो विंडोज पर वास्तव में क्या होता है?

मैं उस समय की संख्या की गणना नहीं कर सकता जो मैंने कुछ स्थानांतरित की है (पिछली बार उपयोग करते समय svn) और दो निर्देशिकाएं थीं, विभाजन सामग्री के साथ। मुझे लगता है कि उत्तर कठिन है, क्योंकि सभी एप्लिकेशन एक ही तरह से फाइलों के समूह को स्थानांतरित नहीं करते हैं।


16
आप जो भी करते हैं, बस पहले नहीं हटाते हैं।
mtone

@monotone उल्लसित +1
निक बोल्टन

जवाबों:


10

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

अपडेट: यदि आप किसी कदम को रद्द करना चाहते थे और उसे फिर से शुरू करना चाहते थे, तो बस स्थानांतरित करने का आदेश फिर से जारी करें। यह आपको चेतावनी दे सकता है कि गंतव्य फ़ोल्डर पहले से मौजूद है, लेकिन फ़ाइलों को ओवरराइट नहीं किया जाएगा (जब तक कि वे मूल चाल से पहले मौजूद नहीं होते हैं, या दो स्थानांतरित आदेशों के बीच जोड़ा गया है) जैसे ही वे स्थानांतरित होते हैं, उन्हें हटा दिया जाता है source (यदि एक अलग विभाजन या ड्राइव पर)।


आह, मैंने कम्प्रेशन के बारे में नहीं सोचा था।
निक बोल्टन

आपको वास्तव में सेक करने की आवश्यकता नहीं है, जिसके लिए बहुत समय की आवश्यकता हो सकती है। कभी-कभी 0 (स्टोरेज) का कम्प्रेशन लेवल बड़े फ़ोल्डरों को ड्राइव पर ले जाने का काम बहुत तेजी से कर सकता है।
वुल्फ

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

@maaartinus वास्तव में, जिस तरह से विंडोज एक्सप्लोरर काम करता है, वह मूल नोड को बदलने के बजाय फ़ोल्डरों में पुनरावर्ती रूप से खोदता है। आप Windows Explorer के लिए सही हैं, यह सिर्फ एक परमाणु चाल नहीं है। मुझे लगता है कि कमांड लाइन का उपयोग किया जा रहा था, मुझे पूछना चाहिए था।
वुल्फ

11

यहां तक ​​कि एक पूरी तरह से स्थिर कंप्यूटर पर जो कभी भी विफल नहीं होता है: यदि आप टाइमस्टैम्प की परवाह करते हैं, तो mvसादे से बेहतर है cp

( cp -aआपके लिए टाइमस्टैम्प को संरक्षित करेगा, और मुझे लगता है कि विंडोज पर ऐसा ही कुछ मौजूद है)।


1
अहा, टाइमस्टैम्प। मैंने ऐसा नहीं माना था! +1
निक बोल्टन

क्या टाइमस्टैम्प भी ईमानदारी से महत्वपूर्ण हैं ...
मार्सिन

1
@ मारकिन, वे एक कारण के लिए हैं, अगर आप पूछ रहे हैं ...
14

10

नहीं।

स्पष्टीकरण:

mv verybigdir dest

भाग्य के लिए बहुत नामधारी हैं। यह एक परमाणु ऑपरेशन है, यानी आधे रास्ते से असफल नहीं हो सकता।

यदि भाग्य किसी अन्य डिवाइस पर है, तो mv पहले कॉपी हो जाएगा, फिर पुराने संस्करण को हटा दें। यह एक परमाणु ऑपरेशन नहीं है। यदि यह विफल हो जाता है, तो आपके पास भाग्य में बहुत ही अस्पष्ट प्रतिलिपि हो सकती है, लेकिन बहुत ही अस्पष्टता अभी भी पूरी होगी।

हां, अन्य एप्लिकेशन अलग-अलग फ़ाइलों को स्थानांतरित कर सकते हैं।


2
वास्तव में, मुझे लगता है कि लिनक्स पर mv / प्रत्येक फाइल या डायरेक्टरी को अलग-अलग डिलीट करता है, पूरे पेड़ को गंतव्य तक कॉपी करने के बजाय पूरे पेड़ को स्रोत से हटाता है ... इसलिए यदि आप आधे रास्ते को रद्द करते हैं, तो आप कुछ को समाप्त कर देंगे दोनों स्थानों में फ़ाइलें, और न ही निर्देशिका पूरी हो जाएगी।
लूट

3
@rob: नहीं। निर्देशिकाएँ किसी भी अन्य की तरह फाइलें हैं, और उसी तरह व्यवहार किया जाता है। आप जिस व्यवहार के बारे में बात कर रहे हैं, वह हासिल किया जाता है mv verybigdir/* dest
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा

2
मूल रूप से, mv प्रत्येक तर्क को "cp && rm" तरीके mv verybigdir/* destसे संभालता है ... बहुत अलग चाल आपरेशनों में बहुत सारे mbigdir के mv को विभाजित करता है। हमेशा याद रखें कि विंडोज के विपरीत, एक लिनक्स प्रोग्राम / टूल को यह देखने के लिए नहीं मिलता है कि वहां "*" है, यह शेल द्वारा विस्तारित है।
जुरगेन ए। एरहार्ड

4

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


3

यूनिक्स पर, फाइलसिस्टम सीमाओं को पार नहीं करने वाले कदमों पर , mvडेटा की प्रतिलिपि नहीं बनाता है: यह सिर्फ विभिन्न निर्देशिकाओं में इनोड डेटाबेस को अपडेट करता है। यह बड़ी फ़ाइलों की तुलना में बहुत तेज़ है cp

इसके अलावा, mvफाइलसिस्टम सीमाओं का उपयोग करके चुपचाप कॉपी और डिलीट मैकेनिज्म को लागू किया जाता है।

इसलिए मुझे लगता है कि आपको पसंद करना चाहिए mv


अच्छी तरह से संक्षेप।
निक बोल्टन

"एक कॉपी और डिलीट मैकेनिज्म" की व्याख्या "प्रत्येक फाइल को कॉपी करें, फिर उसे हटाएं" या "सभी फाइलों को कॉपी करें, फिर उन सभी को हटा दें" के रूप में की जा सकती है।
j_random_hacker

2

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

इसका समाधान यह है: जब तक मुझे यकीन नहीं है कि मैं इसे स्थानांतरित करना चाहता हूं, तब तक कभी न हटें।


1

यदि आप स्रोत फाइल सिस्टम पर ACL का उपयोग कर रहे हैं, लेकिन गंतव्य पर नहीं, तो mv लिनक्स पर स्रोत को कॉपी करेगा और फिर - गंतव्य पर ACL को सेट करने में असमर्थता के कारण - बंद कर देगा। तो आप अंत में दोनों तरफ फाइल रखना। इस व्यवहार को रोकने के लिए mv में कोई स्विच नहीं है इसलिए इस मामले में cp && rm बेहतर है।

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