Mp cp की तुलना में इतना तेज क्यों है? मैं गलत mv कमांड से कैसे ठीक हो सकता हूं?


17

मैं FileZilla में गलती से एक फ़ोल्डर को दूसरे में खींचता और छोड़ता हूं।

~/big_folder
~/some_other_folder

फ़ोल्डर ले जाया गया एक बहुत बड़ा है। इसमें सैकड़ों हजारों फाइलें (नोड_मॉडल, छोटी छवि फाइलें, बहुत सारे फ़ोल्डर) शामिल हैं

कितना अजीब है कि मैं अपने माउस को छोड़ने के बाद, चलती है। फ़ोल्डर "big_folder" को "some_other_folder" में ले जाया जाता है।

~/some_other_folder/big_folder

(वहाँ जाने big_folderके ~/बाद में नहीं है )

तब मुझे गलती का एहसास होता है और वापस जाने की कोशिश करते हैं लेकिन यह FileZilla और टर्मिनल दोनों पर विफल रहता है।

फिर मुझे cp -rफ़ाइलों को कॉपी करना होगा क्योंकि उन फाइलों तक पहुंचने वाले सर्वर-साइड कोड हैं~/big_folder

और हमेशा की तरह इंतजार करना पड़ता है ...

मुझे क्या करना चाहिए?

BTW, यहाँ FileZilla से आउटपुट हैं (यह आगे बढ़ने की विफलता है):

Status:       Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status:       /root/big_folder -> /root/some_other_folder/big_folder

Status:       Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command:  mv "big_folder" "/root/big_folder"
Error:          mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'

37
आह, त्रुटि संदेशों का सबसे उपयोगी received failure with description 'Failure',।
कैप्टन मैन

3
एक टर्मिनल पर जाएं, और कमांड में टाइप करें mv /root/some_other_folder/big_folder /root/big_folder। आपको क्या त्रुटि संदेश मिलता है?
ctrl-alt-delor

मैं शायद साथ जाऊंगाcp -al
निमो

1
ओपी का mv vs cpप्रश्न संबोधित किया गया है, लेकिन मुझे यह सुनना अच्छा लगेगा कि वह फ़ोल्डर को एक दिशा में तुरंत स्थानांतरित करने में सक्षम था, लेकिन दूसरे को नहीं।
user1717828

4
अनिवार्य रूप से उसी कारण से कि किताब की एक प्रति बनाने के लिए एक कमरे से दूसरे कमरे में स्थानांतरित करने के लिए यह बहुत तेज़ है।
डेविड रिचरबी

जवाबों:


63

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

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

फाइलसिस्टम के बीच एक निर्देशिका को ले जाने से डेटा को गंतव्य पर कॉपी करना और उसे स्रोत से हटाना शामिल होगा। यह एक ही फाइल सिस्टम में डेटा की प्रतिलिपि बनाने (डुप्लिकेट) के रूप में लंबे समय तक ले जाएगा।


यदि FileZilla ने सफलतापूर्वक निर्देशिका का नाम बदल दिया ~/big_folderहै ~/some_other_folder/big_folder, तो मैं उस का उपयोग करके वापस कर दूंगा

mv ~/some_other_folder/big_folder ~/big_folder

... पहले बनाने के लिए कोई निर्देशिका कहा जाता है वहाँ थे लगता है कि के बाद ~/big_folder(यदि वहाँ था, इस कदम रखा big_folderसे some_other_folderमें ~/big_folderएक सबफ़ोल्डर के रूप में निर्देशिका)।


6
ओह ... यही कारण है कि मैं आउटपुट में "चलती" के बजाय "नाम बदलना" देखता हूं?
अगेम्प्लेयर

2
@AGamePlayer हाँ, सही है।
Kusalananda

4
@AGPPayer "विफलता" दुर्भाग्य से एक अच्छा त्रुटि विवरण नहीं है। मैंने यह mv ~/some_other_folder/big_folder ~/सुनिश्चित करने के बाद उपयोग किया होगा कि big_folderघर की निर्देशिका में कोई अन्य नहीं है । मैंने कभी भी FileZilla का उपयोग नहीं किया है।
Kusalananda

10
यूनिक्स पर कुछ फ़ाइल रखरखाव करने के लिए विंडोज जीयूआई टूल पर निर्भर न होने का एक और कारण।
मार्क स्टीवर्ट

4
@MarkStewart क्यों अपनी टिप्पणी के अंत में "यूनिक्स पर" ;; क्या कोई समय ऐसा है जब यह एक अच्छा विचार है?
ctrl-alt-delor

11

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

open("hello1.txt", O_RDONLY)               = 3
open("hello2.txt", O_WRONLY|O_CREAT, 0644) = 4
read(3, "Hello, world!\n", 4096)           = 14
write(4, "Hello, world!\n", 14)            = 14
close(3)                                   = 0
close(4)                                   = 0

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

rename("hello1.txt", "hello2.txt")         = 0

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


ओपी एक निर्देशिका ले गया, एक फ़ाइल नहीं।
AL

यह तब भी लागू होता है, जब तक कि ओपी खाली फ़ोल्डरों को स्थानांतरित नहीं कर रहा है, जो एकमात्र ऐसा मामला होगा जहां कोई भी फाइल शामिल नहीं है
Glas

@AL यूनिक्स जैसी प्रणालियों में सब कुछ एक फाइल है।
हिग्स जूल

@AL एक टेक्स्ट फ़ाइल सिर्फ एक उदाहरण थी। एक निर्देशिका के लिए, केवल अंतर यह है कि आपके पास कुछ getdents()और mkdir()कॉल छिड़का हुआ होगा।
वन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.