एक निर्देशिका है (वैचारिक रूप से) एक विशेष "फ़ाइल" जिसमें नामों की एक सूची होती है, और इन नामों की संख्या उन नामों को इंगित करती है। कुछ नाम उपनिर्देशिका हो सकते हैं। एक विशेष प्रविष्टि है ..
जो मूल निर्देशिका की ओर इशारा करती है।
तो, इसकी स्पष्ट, फ़ाइल का नाम बदलना आसान है: आप केवल निर्देशिका प्रविष्टि में नाम बदलते हैं, और कुछ नहीं। यह मानता है कि फ़ाइल वास्तव में एक फ़ाइल है, या किसी अन्य निर्देशिका की सामग्री को संग्रहीत करने के लिए उपयोग की जाने वाली "फ़ाइल" है। दरअसल, एक ही rename
syscall दोनों करता है।
हालांकि, नकल करना बहुत कम तुच्छ कार्य है। आप बस निर्देशिका "फ़ाइल" की प्रतिलिपि बना सकते हैं , लेकिन फिर आपके पास दो निर्देशिकाएं होंगी जहां फाइलें समान हैं (वे हार्डलिंक होंगे)। यदि आपके पास एक ऐसी प्रणाली है जो निर्देशिकाओं को हार्डलिंक की अनुमति देती है, तो वे होंगे, लेकिन चूंकि कोई भी आधुनिक प्रणाली इसकी अनुमति नहीं देती है, कम से कम गैर-रूट के लिए, आपको प्रत्येक उपनिर्देशिका के लिए उस प्रति को करना होगा। आप वास्तव में cp
इस व्यवहार के लिए पूछ सकते हैं cp -lR
: -l
कड़ी के लिए, -R
उस पुनरावृत्ति के लिए।
लेकिन सब कुछ जुड़ा हुआ छोड़ने की संभावना नहीं है कि आप क्या चाहते हैं। इसके बजाय, आप cp
प्रत्येक फ़ाइल की प्रतिलिपि बनाना चाहते हैं । यह काफी महंगा ऑपरेशन है: प्रत्येक फ़ाइल को मेमोरी में पढ़ा जाना चाहिए, और दूसरे स्थान पर डिस्क पर वापस लिखा जाना चाहिए। यह वास्तव में फ़ाइलों को खोलने, पढ़ने, लिखने और बंद करने के लिए कई syscalls लेता है, और जिसे प्रत्येक फ़ाइल के लिए दोहराया जाना है।
पारंपरिक फाइल सिस्टम डिस्क पर भी इस तरह से काम करते हैं। फ़ाइलों के एक समूह को कॉपी करने का कोई तरीका नहीं है, अन्य के अलावा हर एक को व्यक्तिगत रूप से जाने और इसे कॉपी करने के लिए, और उन प्रकार के फाइल सिस्टम हैं जो मूल कमांड लाइन उपयोगिताओं के डिजाइन किए जाने के समय उपयोग में थे।
mv
एक फाइल सिस्टम से दूसरे में समान "सिर्फ डायरेक्टरी एंट्री में नाम बदलते हैं"?