2009-11-27 7 views
14

मैं अपने सिस्टम या किसी निश्चित निर्देशिका से सभी लिंक की गई फ़ाइलों की सूची कैसे प्राप्त कर सकता हूं। मैं लिंक बनाना चाहता था लेकिन वे समय के साथ अप्रबंधनीय बन गए। मैं एक निर्देशिका से ऐसे सभी लिंक की सूची चाहता हूँ। क्या कोई मदद कर सकता है?लिनक्स पर अन्य निर्देशिकाओं या फ़ाइलों की मूल रूप से नरम या हार्ड लिंक वाली सभी फ़ाइलों को कैसे ढूंढें?

+1

मुझे लगता है कि यह serverfault –

+0

से संबंधित है सर्वरफॉल्ट क्या है? – DKSRathore

+0

यहां आज़माएं: serverfault.com –

उत्तर

27

सिमलिंक ढूँढना आसान है:

% find . -type l 

हार्ड लिंक ढूँढना मुश्किल है, प्रश्न में निर्देशिका की उपनिर्देशिका भी उपनिर्देशिका तो उन वृद्धि हार्ड लिंक संख्या अधिक है क्योंकि। इस प्रकार यूनिक्स में उप-निर्देशिकाएं उनके माता-पिता से जुड़ी हुई हैं (यह प्रत्येक उपनिर्देशिका में .. प्रविष्टि है)।

आप केवल जुड़ा हुआ फ़ाइलों (और नहीं निर्देशिका) मिल चाहते हैं, यह काम करेगा:

% find . -type f \! -links 1 

यह काम करता है क्योंकि एक फ़ाइल है कि है हार्ड लिंक करता है एक लिंक संख्या> 1 होगा , और लिंक रद्द फ़ाइल एक लिंक गिनती == 1 है, इसलिए इस आदेश <> 1

वैकल्पिक रूप से जिसका लिंक गणना सभी फ़ाइलों के लिए लग रहा है, आप इस्तेमाल कर सकते हैं find के नए संस्करणों पर:

% find . -type f -links +1 

यह उपर्युक्त कारण के लिए काम करता है; हालांकि, खोज के नए संस्करण केवल एक संख्या के बजाय + n या -n ले सकते हैं। यह क्रमशः एन से कम या उससे कम के लिए परीक्षण के बराबर है।

+0

वाओ है, यह इतना छोटा आदेश था। धन्यवाद Alnitak – DKSRathore

+0

एर ... क्या एक फ़ाइल में <1 लिंक हो सकता है? मेरा मतलब है, क्या यह एक फ़ाइल रहित इनोड नहीं करेगा? – naught101

+0

@ naught101 अच्छी तरह से, आपूर्ति -1 वास्तव में किसी भी फाइल को खोजने में विफल रहेगा। – Alnitak

2

@OP, यदि आपके पास जीएनयू मिल गया है, तो आप -printf "%n", का उपयोग कर हार्ड लिंक पा सकते हैं।

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum 
do 
echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum" 
# if 2 or more files have the same inode number, then they are hard links. 
# you can therefore count how many $inum that are the same and determine those hard links, which 
# you have to try doing yourself. 
done 
1

देखें उदा यहाँ https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html या किसी दिए गए फाइल करने के लिए सभी हार्ड और सॉफ्ट लिंक खोजने के लिए find -L /where/to/search -samefile /some/link/to/file में एल्निटैक और amber_linux जवाब गठबंधन।

+0

बहुत बहुत धन्यवाद! यह वही था जो मैं खोज रहा था - वास्तव में वही फाइल जो वास्तव में वही फाइल है, जिसे मैं देख रहा हूं। – cb2

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