यह कैसे तय करें कि mv डायरेक्टरी की जगह डायरेक्टरी की जगह ले जाए?


18

कहो कि मेरे पास एक निर्देशिका है /hello

फिर मैं करता हूं mv /hello /hello2

मैं आगे बढ़ रहा हूँ /helloमें /hello2/hello? या मैं आगे बढ़ रहा हूँ /helloकरने के लिए /hello2?

ऐसा लगता है कि जब मैं ऐसा कुछ करता हूं, तो मुझे असंगत परिणाम मिलते हैं।


1
परिणाम किस मामले में असंगत है? ऐसा लगता है कि जब भी लक्ष्य निर्देशिका मौजूद होती है तो वह लक्ष्य निर्देशिका में चली जाती है, अन्यथा उसका नाम बदल जाता है।
जम्मूतवी

वह असंगत है। एक ही कमांड को एक ही काम करना चाहिए। अर्थात आज्ञा अस्पष्ट है।
user4951

यह वास्तव में असंगत नहीं है क्योंकि यह संदर्भ के भीतर लगातार काम करता है। यद्यपि मैं देख सकता हूं कि यह कैसे भ्रमित है, लेकिन जितना मैं इसके बारे में सोचता हूं, सभी परिदृश्यों के लिए काम करने के लिए कमांड को उस तरह से होना चाहिए।
जम्मूतवी

मैं यह कहूंगा कि यह कैसे डिज़ाइन किया गया है और इसका तार्किक भी है। यदि आप mvफ़ाइलों के साथ इसका उपयोग करते हैं तो यह एक ही काम करता है। अन्याय का नाम बदलकर। लेकिन mvनिर्देशिकाओं के साथ। यह एक mvआदेश के कारण उपनिर्देशिका के साथ पूरी निर्देशिका को हटाने के लिए अच्छा नहीं है जो नहीं है सुरक्षित। इसलिए इसे स्थानांतरित कर दिया गया है test1/test2। लेकिन अगर आप अभी भी इसे हासिल करना चाहते हैं, तो यह लिखें aliasकि कौन सा चेक दिया गया है कि क्या पैरामीटर डायरेक्टरी है और फिर डायरेक्टरी rm -rf करें और mvकमांड का उपयोग करें लेकिन अपने जोखिम पर इसका उपयोग करें।
harish.venkat

मुझे संदेह है कि आपका उदाहरण अतीत में हुई किसी चीज़ को गलत ठहराने पर आधारित है, "यह लगता है कि मैं ऐसा कुछ करता हूं" पर आधारित है। यदि दोनों /helloऔर /hello2निर्देशिकाएं हैं, तो मैंने देखा है कि cp /hello /hello2असंगत है। अनुगामी स्लैश के संयोजन के आधार पर, कभी-कभी सामग्री की /helloनकल की जाती है /hello2, और कभी-कभी निर्देशिका को स्वयं में कॉपी किया जाता है।
इजाका

जवाबों:


16

mv a bअगर निर्देशिका में है या निर्देशिका में सहानुभूति रखने का प्रयास aकरते हैं । अन्यथा, यह नाम बदलने होगा (या कॉपी और भिन्न फाइल तंत्रों पर अगर हटाना) करने के लिए ।bbab

किसी फ़ाइल को निर्देशिका में ले जाने के लिए एक सुसंगत परिणाम प्राप्त करने के लिए, आप यह कर सकते हैं:

mv file dir/

या

mv file dir/.

तो dirमौजूद नहीं है, तो आपको एक त्रुटि मिल जाएगा, और इसका नाम बदलना नहीं होगा fileकरने के लिए dir

यदि, दूसरी ओर, आप renameबिना किसी चिंता के करना चाहते हैं यदि गंतव्य फ़ाइल निर्देशिका के रूप में मौजूद है या नहीं, तो GNU mv के साथ, आप कर सकते हैं:

mv -T file dest

उस स्थिति में, यदि कोई निर्देशिका है तो fileउसे स्थानांतरित नहीं किया जाएगा । हालांकि, अगर दोनों और निर्देशिका हैं और खाली है, नाम दिया जाएगा (और मूल निकाला गया)। यदि दोनों निर्देशिका हैं और गैर-रिक्त हैं, तो शिकायत करेंगे।destdestfiledestdestfiledestdestdestmv -T

समान, यदि fileऔर निर्देशिका नहींdest हैं (और जिसमें निर्देशिकाओं के लिए सिम्बलिंक भी शामिल हैं), तो इसका नाम बदल दिया जाएगा (हालांकि यदि आपको लिखित अनुमति नहीं है तो आपको एक संकेत मिलेगा ), और मूल हटा दिया जाएगा। उस मामले में जहां निर्देशिका में सहानुभूति होती है, वहां अंतर होता है । साथ , करने के लिए का नाम बदले जाने के बिना, लेकिन , निर्देशिका द्वारा की ओर इशारा में ले जाया जाता ।filedestdestdestmv file destdest-Tfiledest-Tfiledest

तो, योग करने के लिए, के बाद mv -T file dest, या तो fileनाम बदल दिया गया है destया आपको एक त्रुटि संदेश (या शीघ्र) मिलेगा। यदि आदेश सफल हुआ, तो मूल dest, यदि यह पहले से मौजूद है तो हटा दिया जाएगा।


14

यह पूरी तरह से निर्भर करता है कि पहले से ही अस्तित्व में है या नहीं पहले से ही '/ हेल्लो 2' नामक एक निर्देशिका है।

यदि / hello2 मौजूद है और एक निर्देशिका है, तो चाल हमेशा / hello / hello / hello2 की ओर बढ़ेगी

यदि / hello2 मौजूद नहीं है, तो चाल हमेशा के लिए / hello / / hello2 का नाम बदल देगी

यदि / hello2 मौजूद है और एक फ़ाइल है, तो आपको एक त्रुटि मिलेगी, "निर्देशिका 'hello' के साथ गैर-निर्देशिका 'hello2' को अधिलेखित नहीं कर सकता है।


3

मैंने ये कोशिश की

mkdir test1
mv -v test1 test2
output:`test1' -> `test2'
mkdir test1
mv -v test2 test1
output: `test2' -> `test1/test2'
touch test2
output:mv: cannot overwrite non-directory `test2' with directory `test1'

आशा है कि यह सब कुछ समझाता है। -vवर्बोज़ मोड है।

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