एक निर्देशिका के लिए एक सिमलिंक निकालें


1085

मेरे पास एक महत्वपूर्ण निर्देशिका की सहानुभूति है। मैं उस सिम्लिंक से छुटकारा पाना चाहता हूं, जबकि निर्देशिका को पीछे रखते हुए।

मैंने कोशिश की rmऔर वापस आ गया rm: cannot remove 'foo'
मैंने कोशिश की rmdirऔर वापस चला गया और rmdir: failed to remove 'foo': Directory not empty
फिर मैं आगे बढ़ गया rm -f, rm -rfऔरsudo rm -rf

फिर मैं अपना बैक-अप ढूंढने गया।

क्या नहाने के पानी के साथ बच्चे को बाहर फेंकने के साथ सिम्पलिंक से छुटकारा पाने का एक तरीका है?


74
लिनक्स से संबंधित प्रश्न पूछने में क्या गलत है? पिछली बार जब मैंने जाँच की, स्टैक ओवरफ्लो ओएस-विशिष्ट नहीं था
जेरेमी कैंटरेल

6
क्या यह प्रश्न सुपर उपयोगकर्ता या लिनक्स से संबंधित स्टैक एक्सचेंज के लिए बेहतर नहीं होगा?
mwfearnley

45
@mwfearnley यह होगा, लेकिन तारीख की जाँच करें। सुपर यूजर तब तक कोई बात नहीं थी। इसे पोर्ट किया गया है, इसलिए यह वहां भी है। यकीन नहीं है कि यह अभी भी यहाँ क्यों है, लेकिन यह मेरा उच्चतम स्कोरिंग सवाल है और मैं मुंह में उपहार कर्म नहीं करने वाला हूं।
मैथ्यू स्काउटन

16
टीआईपी: rm -r link/ लक्ष्य पर सामग्री को हटाता है
गायन वीरकुट्टी

31
Then I went to find my back-ups- इसने मुझे चकित कर दिया।
frakman1

जवाबों:


1308
# this works:
rm foo
# versus this, which doesn't:
rm foo/

मूल रूप से, आपको किसी फ़ाइल को हटाने के लिए यह बताने की आवश्यकता है , निर्देशिका को हटाने के लिए नहीं । मेरा मानना है कि सी लाइब्रेरी में प्रत्येक के व्यवहार के अंतर के कारण मौजूद है rmऔर rmdirमौजूद है।

किसी भी दर पर, पहले को काम करना चाहिए, जबकि दूसरे को एक निर्देशिका होने के बारे में शिकायत करनी चाहिए।

यदि यह ऊपर के रूप में काम नहीं करता है, तो अपनी अनुमतियों की जांच करें। फ़ाइलों को हटाने के लिए आपको युक्त निर्देशिका को लिखने की अनुमति चाहिए।


121
आह येस। यह समझ आता है। मैंने कभी भी foo टाइप नहीं किया, मैंने f <tab> टाइप किया और मेरे लिए a / bash भरा।
मैथ्यू स्काउटन

6
यह हमेशा काम नहीं करता है। कभी-कभी आपको rm -rf folderNameसिमलिंक को हटाने के लिए (अनुगामी / बिना) दौड़ने की आवश्यकता होती है । उदाहरण के लिए, अमेजन लिनक्स कुछ परिस्थितियों में इस तरह का व्यवहार करता है।
ब्रैंड्सस्क्रिप्ट

18
@ r3mus: -rजब तक आप इसके अंदर सब कुछ खोना नहीं चाहते तब तक सिम्लिंक के साथ प्रयोग न करें । -fफ़ाइल अनुमतियों को ओवरराइड करने के लिए शायद छोड़कर, या तो आवश्यक नहीं होना चाहिए।
मैथ्यू शार्ले

27
विशेष रूप से, AKA 'लिंक' ऑपरेशन unlinkसे कोई संबंध नहीं है ln। नाम unlinkफ़ाइल सिस्टम की फ़ाइल तालिका से फ़ाइल को अनलिंक / निकालने की प्रक्रिया को संदर्भित करता है ताकि सामग्री उनके लिए किसी भी संदर्भ से अलग हो जाए - वे अनलिंक हो। यह एक भ्रामक नाम है जो विशेष रूप से लिंक और सिम्बल पर लागू होने पर भ्रामक है। unlinkक्योंकि यह किसी भी प्रकार की परवाह किए बिना किसी भी फ़ाइल के साथ काम करता है क्योंकि सिम्बलिंक के साथ काम करेगा ।
मैथ्यू शार्ले

4
यदि आप वास्तव में कुछ मूर्खतापूर्ण करने के बारे में चिंतित हैं, alias rm="rm -i"तो मैंने जितना कुछ सोचा है , उससे कहीं अधिक छुपाया है।
मैथ्यू शार्ले

832

"अनलिंक" कमांड का उपयोग करें और सुनिश्चित करें कि अंत में / के पास नहीं है

$ unlink mySymLink

अनलिंक () फ़ाइल सिस्टम से एक नाम हटाता है। यदि वह नाम किसी फ़ाइल का अंतिम लिंक था और कोई प्रक्रिया नहीं है तो फ़ाइल खुली हुई है फ़ाइल हटा दी गई है और जिस स्थान का उपयोग कर रहा था उसे पुन: उपयोग के लिए उपलब्ध कराया गया है। यदि नाम किसी फ़ाइल का अंतिम लिंक था, लेकिन किसी भी प्रक्रिया में अभी भी फ़ाइल खुली हुई है, तो फ़ाइल अस्तित्व में रहेगी जब तक कि अंतिम फ़ाइल विवरणक बंद न हो जाए।

मुझे लगता है कि अगर मैं इसे सही ढंग से पढ़ रहा हूं तो यह समस्याग्रस्त हो सकता है।

यदि एक प्रतीकात्मक लिंक को संदर्भित नाम लिंक हटा दिया जाता है।

यदि किसी सॉकेट, डेटो या डिवाइस को भेजे गए नाम को हटा दिया जाता है, लेकिन जिन प्रक्रियाओं के लिए ऑब्जेक्ट खुला है, वे इसका उपयोग करना जारी रख सकते हैं।

https://linux.die.net/man/2/unlink


33
@OmarAbid "rm foo /" संस्करण मुझे डराता है। यह एक बहुत सुरक्षित लगता है :)
जो फिलिप्स

9
उबंटू में, मैं के साथ परीक्षण किया ~/c/a/file, /c/b/के साथ ln -s ~/c/a ~/c/b/। में ~/c/b/, rm a/काम नहीं करता है, rm -rf a/केवल मूल को खाली करता है aunlink aपूरी तरह से काम करता है, और unlink a/कुछ भी नहीं करता है।
ब्रैडी ट्रेनर

3
OS X 10.10 में, इसके unlinkलिए केवल एक उपनाम है rm। यह दिखाने के लिए जाता है कि rmआपकी निर्देशिका संरचना के किसी भी भाग के साथ काम करते समय उचित अनुशासन का उपयोग किया जाना चाहिए।
डग पॉवर्स

1
स्क्रिप्टिंग rm -fमें चुपचाप किसी लिंक को हटा दिया जाएगा चाहे वह मौजूद हो या न हो, जबकि unlinkलिंक मौजूद नहीं होने पर शिकायत करेगा। अनलिंक के लिए कोई '-f' विकल्प नहीं है, यह स्क्रिप्ट को अधिक जटिल बनाता है।
shonky linux उपयोगकर्ता

22
unlinkनियमित फ़ाइलों को हटा सकते हैं। इसकी कम विशेषता rmऔर सहानुभूति के लिए विशिष्ट नहीं है। ध्वज के rmबिना निर्देशिकाओं को नष्ट नहीं करता है -r। इसलिए मैं आरएम को प्राथमिकता देने की सलाह देता हूं, इसमें क्रिया और संवादात्मक के लिए झंडे हैं; साथ ही सार्थक चेतावनी और त्रुटि संदेश।
थोरसुमोनर

18

rm को प्रतीकात्मक लिंक को हटा देना चाहिए।

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$ 

17

उपयोग करें rm symlinknameलेकिन अंत में एक फ़ॉरवर्ड स्लैश शामिल न करें (उपयोग न करें:) rm symlinkname/। फिर आपसे पूछा जाएगा कि क्या आप सिमलिंक को हटाना चाहते हैं, yहां का जवाब देने के लिए।


63
आप गलत नहीं हैं, लेकिन सही उत्तर पहले से ही है और स्वीकार किया गया है (4 साल पहले!)। क्यों परेशान?
मैथ्यू स्काउटन

1
Google ने "हटाएं एक सिम्लिंक" की खोज करते समय चित्रित स्निपेट के रूप में यह किया था। हो सकता है कि उसे यह बहुत पसंद आया हो, न कि यह सुनिश्चित करने के लिए कि उसके आंकड़े कैसे काम करते हैं। वैसे भी, जब मैंने अपनी कमांड लाइन :-)
रान्डेल

12

यह मानते हुए कि यह वास्तव में एक सिम्लिंक है,

$ rm -d symlink

इसे पता लगाना चाहिए, लेकिन चूंकि यह अव्यक्त कोड को सक्षम नहीं कर सकता है जो किसी अन्य मामले के लिए था जो अब मौजूद नहीं है लेकिन यहां सही काम करने के लिए होता है।


7

यदि rm किसी सिम्लिंक को नहीं हटा सकता है, तो शायद आपको उस निर्देशिका पर अनुमतियों को देखने की आवश्यकता है जिसमें सिमलिंक शामिल है। निर्देशिका प्रविष्टियों को निकालने के लिए, आपको युक्त निर्देशिका पर लिखने की अनुमति चाहिए।


4

मान लें कि आपका सेटअप कुछ ऐसा है: ln -s /mnt/bar ~/fooतो आपको rm fooबिना किसी समस्या के सक्षम होना चाहिए । यदि आप नहीं कर सकते, तो सुनिश्चित करें कि आप के मालिक हैं fooऔर फ़ाइल को लिखने / निष्पादित करने की अनुमति है। हटाने fooसे स्पर्श नहीं होगा bar, जब तक आप इसे पुनरावृत्ति नहीं करते।


2

CentOS पर, बस चलाएं rm linknameऔर यह "प्रतीकात्मक लिंक को हटाने के लिए" पूछेगा। टाइप करें Yऔर Enter, लिंक चला जाएगा और निर्देशिका सुरक्षित रहेगी।


2

मुझे विंडोज सर्वर पर चल रहे MinGW (वास्तव में गिट बैश) के साथ यह समस्या थी। उपरोक्त सुझावों में से कोई भी काम नहीं कर रहा था। अंत में मामले में निर्देशिका की एक प्रतिलिपि बनाई गई तो विंडोज एक्सप्लोरर में नरम लिंक को हटा दिया और फिर रीसायकल बिन में आइटम को हटा दिया। यह शोर कर रहा था जैसे यह फाइलों को हटा रहा था लेकिन नहीं किया। हालांकि एक बैकअप बनाओ!


3
"इसने शोर मचाया जैसे यह फाइलों को हटा रहा था ..." - वाह!
स्टेयरेक्स

LMFAO। "इसने शोर मचाया जैसे यह फाइलें डिलीट कर रहा था ..."
शिवम झा

मुझे फ्लॉपी डिस्क याद है!
कीथ व्हिटिंगम

उपर्युक्त में से किसी ने भी मेरे लिए काम नहीं किया: eddyq @ eddyq-Latitude-E6440: ~ $ ls डेस्कटॉप डाउनलोड ड्रॉपबॉक्स-विंडोज म्यूजिक वीडियो डॉक्युमेंट्स Dropbox example.desktop Pictures टेम्प्लेट 'VmWare vmf files'
eddyq
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.