अगर मेरे पास UNIX फाइल सिस्टम में एक विशिष्ट फ़ाइल है, तो क्या उस फ़ाइल के सभी लिंक खोजने के लिए बैश का उपयोग करने का एक तरीका है, दोनों प्रतीकात्मक और कठोर? अगर मुझे प्रत्येक के लिए अलग-अलग कमांड चाहिए, तो वे क्या हैं?
अगर मेरे पास UNIX फाइल सिस्टम में एक विशिष्ट फ़ाइल है, तो क्या उस फ़ाइल के सभी लिंक खोजने के लिए बैश का उपयोग करने का एक तरीका है, दोनों प्रतीकात्मक और कठोर? अगर मुझे प्रत्येक के लिए अलग-अलग कमांड चाहिए, तो वे क्या हैं?
जवाबों:
इसे GNU के साथ आज़माएँ find
:
find /start/dir -L -samefile /file/to/check -exec ls -li {} \;
उदाहरण आउटपुट:
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1
आप -ls
इसके बजाय का उपयोग कर सकते हैं , -exec
लेकिन यह व्यक्तिगत फ़ाइलों के बजाय लक्ष्य फ़ाइल की इनकोड और अन्य जानकारी दिखाएगा।
-L
और -samefile
सूचीबद्ध होने का कारण बनता है। यदि आप छोड़ देते हैं -L
तो प्रतीकात्मक लिंक का पालन नहीं किया जाता है (देखें man find
)।
यदि आपके पास GNU नहीं है, तो आप यह कर सकते हैं:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
लेकिन यह प्रतीकात्मक लिंक के लिए काम नहीं करेगा।