फ़ाइल का नाम कैसे बदलें .. (डॉट डॉट)?


26

जाहिरा तौर पर आप फ़ाइल का नाम बदल सकते हैं...

अगर मैं पागल हो गए हैं, मैं कैसे करने के लिए फ़ाइल का नाम बदलने हैं ..या .? क्या इस तरह के नाम की भी अनुमति है?

बैकस्लैश डॉट के विशेष अर्थ को अक्षम नहीं करता है:

$ mv test \.
mv: `test' and `./test' are the same file

11
.और ..पहले से मौजूद हैं। और डॉट का कोई विशेष अर्थ नहीं है।
सीटीएल-अल्ट-डेलोर

2
मुझे आश्चर्य है कि अगर आप बाहरी या मीडिया पर विंडोज़ से नाम .या फाइलें बना सकते हैं , तो इसे यूनिक्स-आधारित सिस्टम में माउंट करने का प्रयास करें। एचएम .....FATNTFS
IQAndreas

3
@IQAndreas नोप, विंडोज उपयोग करता है। और .. यूनिक्स करता है उसी तरह के बारे में ( superuser.com/a/571364/330318 )। (और अन्य विशेष नामों के बहुत सारे: superuser.com/a/217526/330318 )
PTwr

2
@PT खिड़की की कहानी उससे कहीं ज्यादा पेचीदा है। कुछ विशेष चीजें फ़ाइल सिस्टम स्तर / NT API स्तर पर होती हैं, कुछ Win32 सबसिस्टम में और कुछ और शेल स्तर में। उदाहरण के लिए आपके दूसरे लिंक से GUID का जादू शेल स्तर पर है, इसलिए आप उन्हें एक सामान्य कमांड लाइन एप्लिकेशन में नहीं देखेंगे। मुझे यकीन है कि अगर नहीं कर रहा हूँ .और ..वास्तव में NTFS और NT एपीआई में मौजूद है या अगर वे केवल Win32 एपीआई से जोड़ा कर रहे हैं। मुझे पता है कि निचले स्तर के NT एपीआई और Win32 के बीच कई विसंगतियां हैं, उदाहरण के लिए Win32 ड्राइव रूट से कई फाइलें छुपाता है।
कोडइन्चोस

@CodesInChaos जहाँ तक मुझे पता है कि dot / dotdot वर्चुअल इंस्टेंस हैं और फ़ाइल सिस्टम ड्राइवर में एमुलेटेड हैं, और यह पुराने FAT में वही था जो यूनिक्स से उधार ( समस्याग्रस्त ) विचार था। दूसरे लिंक के अनुसार, मैं पोस्ट करने से पहले इसे पूरी तरह से नहीं पढ़ना स्वीकार करता हूं। इस तरह से कुछ बेहतर होगा। (लेकिन फिर से, यह एक पूर्ण का अभाव है ।/ .. जानकारी)
PTwr

जवाबों:


25

.. विशेष नहीं है, यह सिर्फ यह है कि यह पहले से मौजूद है।

यूनिक्स, डॉस और एमएस-विंडोज पर प्रत्येक निर्देशिका में एक निर्देशिका .होती है, जो खुद को वापस लिंक करती है, और एक निर्देशिका ..यह अपने मूल निर्देशिका (या स्वयं अगर रूट निर्देशिका) से लिंक करती है।

यदि ..और .विशेष हैं तो यह केवल इसलिए है क्योंकि आप उन्हें हटा नहीं सकते हैं (वास्तव में आप कर सकते हैं, आप केवल उस निर्देशिका को हटा सकते हैं जिसमें उन्हें शामिल किया गया है)।

इसलिए आप किसी भी (अन्य) फ़ाइल को नाम नहीं दे सकते .या ..

लेकिन अगर आप फ़ाइलें बना सकते हैं ..., \, , .. (ध्यान दें वहाँ बाद में एक रिक्ति है ..या किसी अन्य नाम आप की तरह आसानी से आप निर्देशिका सूची में है, लेकिन आप शायद ही इसे यहाँ देख सकते हैं, या); केवल सुरक्षित चरित्र है /(-: अशक्त विशेष वर्ण, नहीं एक विभाजक के रूप में के अलावा कुछ के लिए इस्तेमाल किया चीजों के अंत बताने के लिए और कभी कभी और अशक्त, उन्नत जानकारी चेतावनी)। .इसका कोई विशेष अर्थ नहीं है: नाम, कर्नेल या शेल को फ़ाइल नहीं करना, इसे भागने की आवश्यकता नहीं है। दरअसल अगर कोई फ़ाइल-नाम शुरू होता है .तो यह विशेष है, फ़ाइल सामान्य रूप से छिपी होती है, लेकिन फिर भी इसे भागने की आवश्यकता नहीं होती है।

अलग

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

लिंक्ड प्रश्न का स्पष्टीकरण

जिस प्रश्न में आप प्रश्नकर्ता से लिंक करते हैं, वह फ़ाइल को मूल निर्देशिका में ले जाने की कोशिश कर रहा है, ..लेकिन उसका नाम बदलकर समाप्त हो रहा है ..., एक डॉट से शुरू होने वाली फाइलें डिफ़ॉल्ट रूप से छिपी होती हैं, यही कारण है कि वे इसे ढूंढ नहीं पाते हैं।

जब फार्म में एम.वी. mv a b

  • यदि आप .इसे स्थानांतरित करने के लिए प्रभावी रूप से एक ऑपरेशन है, लेकिन mvइसे एक त्रुटि के रूप में मानते हैं।
  • यदि आप ..इसे स्थानांतरित करते हैं तो फ़ाइल को मूल निर्देशिका में ले जाएंगे।

1
आपका क्या मतलब है If you move to . it is effectively a no operation? यह एक "नहीं सेशन" नहीं है यह एक त्रुटि है यदि आप ए से बी में एक फ़ाइल को स्थानांतरित करने का प्रयास करते हैं जब ए और बी एक ही चीज हैं। इस त्रुटि का अधिक व्यावहारिक प्रदर्शन mv foo ../some_dir/fooया है mv foo some_subdir/../foo
ब्रैंडिन

7
'वर्ण' की कुछ परिभाषा के लिए, NUL (0x00) फ़ाइल और निर्देशिका नामों में उपयोग से प्रतिबंधित है।
user117529

1
आरक्षित वर्ण (यानी /NUL) और आरक्षित नाम (यानी .और ..) के बीच अंतर को स्पष्ट किया जा सकता है। इसके अलावा यह इंगित करने योग्य है कि .नाम के शुरू में केवल आवेदन परत पर विशेष अर्थ है और कर्नेल या सिस्टम कॉल एपीआई में नहीं।
कैस्पर

मुझे लगता है कि आपका स्थान खो गया।
nyuszika7h

1
..और . कर रहे हैं विशेष: ले जाने या उन्हें नहीं निकाल सकते। लेकिन वे विशेष जब फ़ाइलों को ले नहीं कर रहे हैं करने के लिए उन्हें।
रिस्टोरियरपोस्ट

52

आप किसी फ़ाइल का नाम नहीं बदल सकते हैं .या ..क्योंकि सभी निर्देशिकाओं में पहले से ही उन दो नामों की प्रविष्टियाँ हैं। (वे प्रविष्टियाँ निर्देशिकाओं की ओर इंगित करती हैं, और आप किसी फ़ाइल का नाम निर्देशिका में नहीं रख सकते।)

mv उस स्थिति का पता लगाता है जहां गंतव्य एक मौजूदा निर्देशिका है, और इसे फ़ाइल को उस निर्देशिका में स्थानांतरित करने के अनुरोध के रूप में व्याख्या करता है (इसके अन्य नाम का उपयोग करके)।

बैकस्लैश का इससे कोई लेना-देना नहीं है, क्योंकि .शेल मेटाचैकर नहीं है। \.और .उसी के समान हैं bash


9

समस्या यह है कि आप एक निर्देशिका पर एक फ़ाइल ले जा रहे हैं। इसे विफल होने दिया जाता है।

मैं आपको यह बताने जा रहा हूं कि यह एक बार कैसा था।

mkdir अनिवार्य रूप से इसे पढ़ता था (जबकि मैं इसे श में लिख रहा हूं, यह वास्तव में C और setuid-root में लिखा गया था)।

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

तो जैसा कि आप देख सकते हैं कि वहाँ के बारे में बहुत खास नहीं है। और .. इस तथ्य को छोड़कर वे आपके लिए mkdir द्वारा बनाए गए हैं और पहले से मौजूद हैं। अब कोड है कि कहते हैं कि आप उन्हें हटा नहीं सकते, लेकिन यह हमेशा मामला नहीं था।

rmdir ऐसे दिखते थे:

rm -d $1/..
rm -d $1/.
rm -d $1

इतिहास के सबक के लिए +1, और कुछ जोड़ना ठीक से कवर नहीं।
ctrl-alt-delor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.