वर्तमान निर्देशिका के सापेक्ष एक प्रतीकात्मक लिंक बनाएँ


110

मैं अपने घर निर्देशिका में एक प्रतीकात्मक लिंक बनाने की कोशिश कर रहा हूं जो मेरे बाहरी एचडीडी पर एक निर्देशिका की ओर इशारा करता है।

जब मैं इसे इस तरह निर्दिष्ट करता हूं तो यह ठीक काम करता है:

cd ~
ln -s /run/media/name/exhdd/Data/ Data

हालाँकि यह एक गलत लिंक बनाता है जब मैं यह कोशिश करता हूँ:

cd /run/media/name/exhdd
ln -s Data/ ~/Data

यह एक लिंक बनाता है जिसे मैं नहीं कर सकता cd

जब मैं कोशिश करता हूं, तो मारपीट की शिकायत होती है:

bash: cd: Data: Too many levels of symbolic links

मेरे घर में डेटा प्रतीकात्मक लिंक भी लाल रंग में रंगीन है जब lsरंगीन आउटपुट प्रदर्शित करने के लिए सेट किया गया है।

ये क्यों हो रहा है? मैं उस तरीके से एक लिंक कैसे बना सकता हूं? (मैं अपनी वर्किंग डाइरेक्टरी में एक डायरेक्टरी को दूसरी डायरेक्टरी में सिमिलर बनाना चाहता हूं।)


संपादित करें: इस StackOverflow के उत्तर के अनुसार , यदि दूसरा तर्क (मेरे मामले में जो ~ / डेटा होगा) पहले से मौजूद है और एक निर्देशिका है, lnतो उस निर्देशिका के अंदर लक्ष्य के लिए एक सिमलिंक बनाएगा ।

हालाँकि, मैं एक ही मुद्दे का सामना कर रहा हूँ:

ln -s Data/ ~/

7
बस एक यादृच्छिक टिप: cd ~आमतौर पर जैसा होता है cd

3
ls -l ~/Dataआपको यह देखने में मदद करेगा कि "लाल" लिंक के साथ क्या गलत था।
msw

हम्म, पता नहीं था कि मैं ऐसा कर सकता था, धन्यवाद। मुझे याद है कि मैं catइसे करने की कोशिश कर रहा था, लेकिन मैं भूल गया था कि परिणाम क्या था ... (मैं उन पर पल में घर नहीं हूं।)
जेकोरा

साइड नोट, आप केवल सभी फाइलें, निर्देशिका और एक विशेष फ़ोल्डर के अंदर subdir की एक सिमलिंक बनाने के लिए, कहते हैं, के अंदर सभी आइटम चाहते हैं लगता है /run/media/name/exhdd/Data/के लिए Dataउसके बाद निम्न का उपयोगln -s /run/media/name/exhdd/Data/* Data
user2555595

जवाबों:


115

यहाँ क्या हो रहा है। यदि आप एक रिश्तेदार पथ के साथ एक सिम्लिंक बनाते हैं, तो सिम्लिंक रिश्तेदार होगा। प्रतीक केवल उन रास्तों को संग्रहीत करते हैं जो आप उन्हें देते हैं। वे कभी भी पूर्ण पथों का समाधान नहीं करते हैं। चल रहा है

$ pwd
/usr/bin
$ ln -s ls /usr/bin/ls2

नाम के एक सिमलिंक बनाता ls2में /usr/binकरने के लिए ls(अर्थात। /usr/bin/ls) निर्देशिका कि सिमलिंक में है (के सापेक्ष /usr/bin)। उपरोक्त कमांड किसी भी डायरेक्टरी से एक कार्यात्मक सिमलिंक बनाएगी।

$ pwd
/home/me
$ ln -s ls /usr/bin/ls2

यदि आप एक अलग निर्देशिका में सिमलिंक को स्थानांतरित करते हैं, तो यह फ़ाइल को इंगित करना बंद कर देगा /usr/bin/ls

आप एक सिमलिंक बना रहे हैं जो Dataइसे इंगित और नाम दे रहा है Data। यह खुद ही इशारा कर रहा है। आपको निर्देशिका के निरपेक्ष पथ के साथ एक सिम्लिंक बनाना होगा।

ln -s "$(realpath Data)" ~/Data

14

मुझे भी यही समस्या आ रही थी। Google ने इस जवाब का नेतृत्व किया लेकिन सबसे सरल समाधान यहां प्रलेखित नहीं है:

ln -sT 

-टी करता है

आदमी ln:

-T, --no-target-directory
    treat LINK_NAME as a normal file always

बस इसे यहाँ जोड़ने के लिए एक ही प्रश्न के साथ किसी को भी यह मिल सकता है :)


9

lnरिश्तेदार रास्तों के साथ व्यवहार अनुचित है। पवित्रता बहाल करने के लिए, -rध्वज का उपयोग करें ।

cd /run/media/name/exhdd
ln -sr Data/ ~/Data

स्पष्टीकरण:

   -r, --relative
          create symbolic links relative to link location

इसका मतलब है कि lnवह वही करेगा जो आप उम्मीद करते हैं। यह ध्यान में रखना होगा कि आप किस निर्देशिका में हैं, लक्ष्य किस निर्देशिका में है और निर्देशिका के सापेक्ष पथ का निर्माण करें। लिंक डिफ़ॉल्ट व्यवहार (बिना -r) के पहले पैरामीटर (लक्ष्य) की शाब्दिक व्याख्या करने के लिए है । किस मामले में आपको स्वयं पथ का निर्माण करना होगा ताकि यह लिंक की निर्देशिका में मान्य हो।

वैकल्पिक रूप से, @SmithJohn द्वारा उल्लिखित एक पूर्ण पथ का उपयोग करें

ln -s "$(realpath Data)" ~/Data #bash shell

या

ln -s "(realpath Data)" ~/Data #fish shell

-1

बहुत आसानी से आप एक फ़ोल्डर के लिए लिंक बना सकते हैं। मेरी आज्ञा देखो

ln -s / home / targatedfolder / var / www / html / link_name

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