`Mv फ़ाइल / dir` फ़ाइल को वर्तमान कार्य निर्देशिका की उपनिर्देशिका में क्यों नहीं ले जाती है?


10

मैं अपनी /etcनिर्देशिका में था और कमांड टाइप किया

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

मैंने सोचा था कि फ़ाइल को उस निर्देशिका में स्थानांतरित कर openvpnदूंगा जो निर्देशिका की एक उपनिर्देशिका है /etc। हालाँकि, यह प्रतीत नहीं होता कि क्या हुआ। यह सब मैं पुष्टि कर सकता हूं कि कमांड निष्पादित हो गई।

जवाबों:


51

बशर्ते इस नाम की कोई निर्देशिका मौजूद न हो, आपने फ़ाइल का नाम बदलकर openvpnअपनी मूल निर्देशिका में स्थित कर दिया /। इसे वापस लाने के लिए, दौड़ें:

sudo mv /openvpn /etc/MyFile.conf

यदि निर्देशिका मौजूद थी तो आपने फ़ाइल को उसके अंदर स्थानांतरित कर दिया था, तो इसका उलटा है:

sudo mv /openvpn/MyFile.conf /etc/

वर्तमान निर्देशिका के मौजूदा उपनिर्देशिका में इसे स्थानांतरित करने के लिए आप इनमें से किसी एक को चला सकते हैं - जो सापेक्ष पथों का उपयोग करते हैं:

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/

.वर्तमान निर्देशिका का एक लिंक है, इसलिए ./एक पथ की शुरुआत में "इस निर्देशिका में" का अर्थ है। अंत में स्लैश का मतलब है कि openvpnएक निर्देशिका है और आप इसके अंदर फ़ाइल को स्थानांतरित करना चाहते हैं। आप इसे प्रदान नहीं करते हैं, तो फ़ाइल की जाएगी ले जाया गया है, तो इस नाम का एक निर्देशिका, मौजूद है और कुछ फ़ाइल की जाएगी उसमें नाम दिया करने के लिए openvpn। एक साथ /अंत में, mvआपको चेतावनी देगा यदि निर्देशिका लापता और है नहीं , नाम बदलने ताकि सुरक्षित तरीके से अगर आप का नाम बदलने के लिए नहीं करना चाहते है।

यदि आपका मार्ग /दूसरी ओर से शुरू होता है , तो यह वर्तमान कार्य निर्देशिका की परवाह किए बिना एक पूर्ण मार्ग है, यह हमेशा रूट निर्देशिका के सापेक्ष होता है /। फ़ाइल और गंतव्य दोनों के लिए निरपेक्ष पथ का उपयोग करने से आपकी कमान इस तरह दिखाई देगी:

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/

आगे की पढाई


2
यदि आपको पता नहीं है कि निर्देशिका मौजूद है या नहीं, तो sudo mv /openvpn/MyFile.conf /etc/पहले कमांड का प्रयास करें । संभावित परिदृश्य में निर्देशिका मौजूद नहीं थी, यह आपको केवल एक त्रुटि देगा (शायद "निर्देशिका नहीं") और फ़ाइल सिस्टम को स्पर्श न करें। फिर, आप बस कर सकते हैं sudo mv /openvpn /etc/MyFile.conf
flarn2006

9

आपको उपयोग करने की आवश्यकता है

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/

MyFile.confफ़ाइल को openvpnउप-निर्देशिका में ले जाने के लिए /etc/

दूसरी ओर

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

फ़ाइल को /निर्देशिका के रूप में ले जाएगा openvpn(यानी नाम बदलकर openvpn) इसके बजाय ( /openvpnनिर्देशिका निर्देशिका मौजूद नहीं है)।


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

4

जब आप कोई फ़ाइल ले जाते हैं, तो आप OS को वह निर्देशिका बताते हैं जिसमें आप इसे रखना चाहते हैं, या नया पथ जिसे आप देना चाहते हैं।

आपने OS "/ openvpn" को बताया। तो यह बिल्कुल ऐसा करने जा रहा है - अगर / Openvpn मौजूद है (रूट डायरेक्टरी में स्थित "openvpn" नामक एक वस्तु) की जाँच करें और एक निर्देशिका है, और यदि ऐसा है तो अपनी फ़ाइल को इसमें स्थानांतरित करें, या अगर / Openvpn एक फ़ाइल है या मौजूद नहीं है, नाम बदलें और अपनी फ़ाइल को स्थानांतरित करें ताकि अब यह / openvpn के रूप में सुलभ हो।

आप जो करना चाहते थे, उसे एक निर्देशिका "ओपनवीएनएन" के भीतर ले जाना था , जो कि आपकी वर्तमान निर्देशिका में पाया जाना है , न कि फ़ाइल सिस्टम रूट निर्देशिका (जो कि अग्रणी "/" दर्शाता है) में से एक है। तो आप के लिए बात करने के लिए किया था कि इस कदम आदेश में dir, निरपेक्ष पथ के लिए नहीं "/ OpenVPN"। इनमें से कोई भी काम करेगा:

  • mv MyFile.conf openvpn - इस "Openvpn" के लिए मेरी वर्तमान dir में देखें
  • mv MyFile.conf /etc/openvpn - निरपेक्ष मार्ग / आदि के लिए देखो / Openvpn
  • mv MyFile.conf openvpn/ - Openvpn नामक एक डायर के लिए मेरी वर्तमान डायर में देखो
  • mv MyFile.conf ./openvpn - "वर्तमान dir" को और भी स्पष्ट बनाता है

लघु संस्करण - आपने "मेरे वर्तमान निर्देशिका" का अर्थ "/" का उपयोग किया है, इसलिए "/ Openvpn" का अर्थ है "Openvpn जो मेरी वर्तमान निर्देशिका में है"। लेकिन एक अग्रणी "/" का अर्थ केवल "रूट डायरेक्टरी" होता है, इसलिए "/ ओपेनवैप्न" का अर्थ "रूट डायरेक्टरी में ओपेनवोन" होता है। आपको बस "ओपनवप्न" या "ओपेनवोन /" का उपयोग करने की आवश्यकता थी, जिसका अर्थ है "मेरी निर्देशिका में ओपनवैप्न "।


1
निश्चित नहीं है कि यह उत्तर क्यों अस्वीकृत किया गया था; यह सही है और मुझे लगता है कि यह सबसे साफ है!
को कक्षा

1

कोई भी मार्ग, जिसके साथ शुरू होता है /वह एक निरपेक्ष पथ है, सापेक्ष नहीं।

यदि सभी रास्ते हमेशा वर्तमान निर्देशिका के सापेक्ष होते, तो आप cd /etcपहले स्थान पर कैसे होते? आपको ऐसा करना होगा cd ../../../../../etcऔर आशा करनी चाहिए कि जब तक आप रूट डायरेक्टरी में नहीं आ जाते, तब तक पर्याप्त स्तर ..या बस करते रहें cd ..

या आपको निरपेक्ष पथों को व्यक्त करने के लिए कुछ अन्य वाक्यविन्यास की आवश्यकता होगी। लेकिन यूनिक्स ने /निरपेक्ष अर्थ पर निर्णय लिया , प्रक्रिया की वर्तमान कार्यशील निर्देशिका के सापेक्ष कुछ और। तो mv MyFile.txt openvpnकाम करेगा।


और नहीं, यह मौजूदा या नहीं फ़ाइलों से पूर्ण बनाम सापेक्ष अनुमान लगाने के लिए अच्छी तरह से काम नहीं करेगा। हम mkdirसिस्टम कॉल को सिस्टम कॉल chdirया renameसिस्टम कॉल से अलग तरीके से ट्रीट करने के लिए नहीं चाहते हैं, और mvप्रोग्राम को ऐसा करने के बीच असंगतता mvऔर कुछ अन्य प्रोग्राम के लिए जगह छोड़ देता है जो आउटपुट फ़ाइल नाम लेता है।

mvपहले से ही विशेष है क्योंकि जब rename()गंतव्य एक निर्देशिका है, तो यह स्रोत फ़ाइल नाम को उस गंतव्य निर्देशिका में जोड़ता है और फिर से कोशिश करता है। लेकिन ध्यान दें कि एक सरल कार्यान्वयन रणनीति पहले rename()सिस्टम कॉल के साथ EEXISTया उसके साथ विफल होने पर निर्भर करती है EISDIR। इसलिए हमें यह जानना होगा कि क्या फाइल सिस्टम की जांच करने से पहले कोई रास्ता सापेक्ष या निरपेक्ष है।

(आरंभिक यूनिक्स धीमे कंप्यूटरों पर चलता था, जहां अगर कोई निर्देशिका मौजूद होती है तो अतिरिक्त जांच का मतलब अतिरिक्त I / O हो सकता है यदि यह कैश नहीं था, या निर्देशिका कैशिंग पर अधिक दबाव है। लेकिन मुझे लगता है कि विवेक / शुद्धता तर्क यह समझाने के लिए पर्याप्त हैं कि आपका पहला अनुमान क्यों है। ऐतिहासिक दक्षता तर्कों का सहारा लिए बिना, सिस्टम के काम करने का एक प्रशंसनीय तरीका नहीं था।)


1

अन्य उत्तरों को पूरा करने के लिए:

mv file.txt /location

विंडोज के लिए जैसा है, वैसा ही है

mv file.txt c:\location

फाइल सिस्टम लिनक्स में के अनुसार माना जाता है फाइल सिस्टम पदानुक्रम मानक , या FHS छोटे के लिए। यह आपको यह जानने में मदद करता है कि किसी फ़ाइल को उसकी प्रकृति और सामग्री के आधार पर कहाँ रखा जाना चाहिए।

पहला फ़ोल्डर ( c:विंडोज में बराबर ) है /

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