किसी निर्देशिका की प्रतीकात्मक कड़ी को कैसे अधिलेखित करें?


15

दो निर्देशिका foo1और हैं foo2

सबसे पहले मैं एक डायरेक्टरी सिमिलिंक बनाता हूं ln -s foo1 bar। उसके बाद मैं सिम्लिंक को बदलना चाहता हूं, इसलिए मैंने टाइप कियाln -sf foo2 bar

लेकिन barअभी भी साथ जुड़ा हुआ है foo1foo2के अंदर साइमलिंक बनाया गया है foo1

मैं किस प्रकार करना चाहिए जब मैं बदलना चाहते foo1द्वारा foo2?

मैंने तीन वातावरणों में परीक्षण किया।

  1. Ubuntu 12.04, ln (GNU कोरुटिल्स) 8.13
  2. सेंटोस 6.4, एलएन (जीएनयू कोरुटिल्स) 8.4
  3. OS X 10.7.5, ln (बिना संस्करण के)

जवाबों:


18

ऐसा करने का उचित तरीका -n, --no-dereferenceविकल्प का उपयोग करना है।

$ ln -snf foo2 bar

यह lnमौजूदा सिमलिंक को एक फ़ाइल के रूप में मानता है। अन्यथा, यह डीरेफरेंस barकरता है foo1, इसमें उतरता है foo1और मूल TARGETनाम का उपयोग करता है LINK_NAMEऔर यही कारण है कि आप निर्देशिका foo2के अंदर बनाए जा रहे सिम्लिंक के साथ समाप्त होते हैं foo1lnनिम्नलिखित पर मैनपेज ...

-एन, -नो-डीरेफेरेंस
       अगर यह एक प्रतीकात्मक लिंक है तो LINK_NAME को एक सामान्य फ़ाइल के रूप में मानें
       निर्देशिका

नीचे विकल्प के lnसाथ और इसके बिना संस्करण के 8.21 के साथ मेरे आर्क लिनक्स डेस्कटॉप पर शेल आउटपुट है --no-dereference, मुझे वही विकल्प मिला जो आपने --no-dereferenceविकल्प के बिना किया था , लेकिन --no-dereferenceविकल्प के रूप में इसका उपयोग करना अपेक्षित था।

$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
  total 0
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2

आपके उत्तर के लिए धन्यवाद। अगर यह पर्यावरण पर निर्भर समस्या है, तो मैं अपना पर्यावरण लिखूंगा। आप किस ओएस का उपयोग कर रहे हैं? क्या आउटपुट ln --version?
ironsand

मैंने 8.17 संस्करण के साथ फेडोरा 18 वीएम पर यह कोशिश की। दिलचस्प है, मैंने 8.21 संस्करण के साथ अपने आर्क लिनक्स डेस्कटॉप पर यह कोशिश की और आपके द्वारा किए गए समान परिणाम प्राप्त हुए। कहीं न कहीं लगता है कि उन दो संस्करणों में कुछ बदल गया है। हालांकि मैंने जो समाधान पोस्ट किया वह दोनों उदाहरणों में काम किया।
ड्रू चापिन

FYI करें, मुझे यह जवाब justlinux.com मंचों पर मिला ।
ड्रू चैपिन

धन्यवाद druciferre! मैंने भी कभी नहीं सोचा था कि lnकमांड इतनी बार अपग्रेड करती है।
ironsand

मैंने ओएक्सएक्स में भी परीक्षण किया। lnनिर्देशिका को अधिलेखित ln -snfकरने और समस्या को हल करने के साथ ubuntu और centos के समान काम करता है। हालांकि ln -hऑक्स में उपयोग करने के लिए पसंदीदा विकल्प है।
ironsand
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.