2008-09-19 33 views
50

मेरे पास मेरे सर्वर पर एक फ़ोल्डर है जिसमें मेरे पास कई प्रतीकात्मक लिंक इंगित किए गए थे। मैंने तब से एक नया फ़ोल्डर बनाया है और मैं उन सभी प्रतीकात्मक लिंक को नए फ़ोल्डर में इंगित करने के लिए बदलना चाहता हूं। मैं मूल फ़ोल्डर को एक सिम्लिंक के साथ नए फ़ोल्डर में बदलने पर विचार करता था, लेकिन ऐसा लगता है कि अगर मैं उस अभ्यास के साथ जारी रहता तो यह बहुत गन्दा हो सकता है।क्या यह जांचने का कोई तरीका है कि निर्देशिका में इंगित प्रतीकात्मक लिंक हैं या नहीं?

मैं जो कर रहा हूं वह नए फ़ोल्डर को इंगित करने के लिए मैन्युअल रूप से सिम्लिंक बदल रहा है, लेकिन हो सकता है कि मैंने एक जोड़े को याद किया हो।

क्या यह जांचने का कोई तरीका है कि कोई विशेष फ़ोल्डर किसी संकेतक को इंगित करता है या नहीं?

उत्तर

63

मैं खोज आदेश का उपयोग करूंगा।

find . -lname /particular/folder 

कि रिकर्सिवली /particular/folder को सिमलिंक के लिए वर्तमान निर्देशिका खोज करेंगे। ध्यान दें कि यह केवल पूर्ण सिम्लिंक पाएगा। ऐसा ही एक आदेश वस्तुओं "फ़ोल्डर" कहा जाता है पर इशारा करते हुए सभी सिमलिंक के लिए खोज करने के लिए इस्तेमाल किया जा सकता:

find . -lname '*folder' 

वहां से आप किसी भी झूठे सकारात्मक उखाड़ फेंकने की आवश्यकता होगी।

+4

धन्यवाद, यह अच्छी तरह से काम करता है। किसी और के लिए यह कोशिश कर रहा है: -मैक्सडेप स्विच का उपयोग करके वास्तव में खोज को तेज करने में मदद मिली, क्योंकि मुझे पता था कि लिंक कितनी गहराई होगी। – nickf

+1

वाह, यह वही है जो मैं ढूंढ रहा था। उत्तर के लिए धन्यवाद skimt और सवाल पूछने के लिए @nickf :) – icasimpan

+1

धन्यवाद। बस सावधान रहें कि एक पिछला स्लैश की उपस्थिति या लिंक में नहीं, परिणाम बदल सकता है। तो आपको एक 'ढूंढने की आवश्यकता हो सकती है। -lname '* फ़ोल्डर?' ' – regilero

1

hardlinks लिए, आप "ls" विकल्पों में से एक के साथ अपने निर्देशिका की inode प्राप्त कर सकते हैं (-i, मुझे लगता है)।

फिर -inum के साथ सभी सामान्य हार्डलिंक्स का पता लगाएगा।

सॉफ्टलिंक के लिए, आपको ls -l को "->" के बाद पाठ की तलाश करने वाली सभी फ़ाइलों पर ls -l करना होगा और यह सुनिश्चित करने के लिए सामान्य करना होगा कि यह एक पूर्ण पथ है।

+0

यह फ़ाइल में सभी हार्डलिंक खोजने के लिए अच्छा काम करेगा। लेकिन एक निर्देशिका के लिए हार्डलिंक्स एक बड़ा नंबर नहीं है। फाइल सिस्टम ड्राइवर आपको ऐसी चीज बनाने नहीं देगा, और यदि आप एक बनाने के लिए हाथ से कच्चे विभाजन को संपादित करने और संपादित करने के लिए पर्याप्त मस्तिष्कवादी हैं, तो यह कई चीजें बहुत दुखी करता है। – Thomee

+0

मैं फ़ोल्डरों के लिए हार्ड लिंक की अनुशंसा नहीं करता हूं, लेकिन ओएस एक्स पर टाइममैचिन उनका उपयोग करता है। ईजी: http://belkadan.com/blog/2011/07/rm-vs-Time-Machine/ –

5

ऐसे सिम्लिंकों की जांच करने के लिए वास्तव में कोई प्रत्यक्ष तरीका नहीं है। इस बात पर विचार करें कि आपके पास एक फाइल सिस्टम हो सकता है जो हर समय माउंट नहीं किया जाता है (उदाहरण के लिए एक बाहरी यूएसबी ड्राइव), जिसमें सिस्टम पर किसी अन्य वॉल्यूम में सिम्लिंक हो सकते हैं।

for a in `find/-type l`; do echo "$a -> `readlink $a`"; done | grep destfolder 

मैं ध्यान दें कि FreeBSD के find-lname विकल्प है, जिसके कारण मैं ऊपर के साथ समाप्त हो गया का समर्थन नहीं करता:

आप के साथ कुछ कर सकते हैं।

2

यदि मूल फ़ोल्डर को इंगित करने वाले लिंक हैं तो मुझे अन्य सभी फ़ोल्डरों को देखने के अलावा, मुझे नहीं लगता कि यह संभव है। यदि ऐसा है, तो मुझे दिलचस्पी होगी।

6

आप the symlinks program मार्क प्रभु द्वारा लिखित के साथ सिमलिंक ऑडिट कर सकते हैं - यह पूरा फाइल सिस्टम को स्कैन करेगा, पूर्ण रूप के लिए सिमलिंक रास्तों को सामान्य और उन्हें stdout में मुद्रित करें।

1
find /foldername -type l -exec ls -lad {} \; 
+0

यह मैक पर बहुत अच्छा काम करता है। धन्यवाद। एक WordPress हैक द्वारा की गई साइट पर कुछ दुर्भावनापूर्ण सिम्लिंक पाए गए। वास्तव में। धन्यवाद। – Vik

संबंधित मुद्दे

 संबंधित मुद्दे