मुझे परिपत्र प्रतीकात्मक लिंक कैसे मिलेंगे?


12

मैं एक एचपी-यूएक्स सिस्टम पर काम कर रहा हूं और मैं खोजना चाहता हूं कि क्या कोई परिपत्र प्रतीकात्मक लिंक हैं।

अब तक मैं कमांड का उपयोग कर रहा हूं:

ls -lrt  `find ./ -follow -type l`

लेकिन यह परिणाम के रूप में वर्तमान निर्देशिका पर केवल ls -lrt कर रहा है।

किसी सिस्टम में सभी परिपत्र प्रतीकात्मक लिंक खोजने के लिए मुझे किस कमांड का उपयोग करना चाहिए?


1) आप वर्तमान निर्देशिका प्राप्त कर रहे हैं क्योंकि findकमांड या तो सिर्फ प्रिंट .कर रहा है ls -lrtया कुछ भी नहीं प्रिंट कर रहा है (इसलिए आप अभी चल रहे हैं या ls -lrt .) एचपी-यूएक्स के बारे में पर्याप्त नहीं जानते हैं findकि आपको यह कैसे ठीक करना है (शायद यह एक स्पष्ट आवश्यकता है -print? )। 2) "परिपत्र" का क्या मतलब है? ./a -> ./bऔर ./b -> ./a? किस बारे में /home/foo/a -> /home? या /home/foo/a -> /home/barऔर /home/bar/b -> /home/foo?
डेरफेक

सर्कुलर से मेरा मतलब किसी भी तरह के लिंक से है जो उपरोक्त सभी को लूप बना सकता है। मैं अभी -प्रिंट के साथ कोशिश कर रहा हूं।
व्लादिमीर

इसके अलावा, -followवास्तव में मुझे क्यों शामिल नहीं करता है कुछ वास्तविक लिंक परिणाम हैं?
व्लादिमीर

इसके बिना -follow, findलिंक की स्वयं जांच करता है, न कि वह फ़ाइल जिसकी ओर इशारा करता है। तो find . -type lउन चीज़ों को प्रिंट करता है जो लिंक हैं (क्योंकि वे हैं -type l) यह देखने के लिए भी कि वे क्या इंगित करते हैं (जो कि फाइलें या निर्देशिकाएं या अन्य लिंक जो फाइलों या निर्देशिकाओं की ओर इशारा करती हैं)।
डर्फ़के

जवाबों:


18

GNU फाइंड का मेन्यू कहता है कि सभी POSIX फाइल्स सिस्टम लूप्स का पता लगाने और इन मामलों में एरर मैसेजेस का पता लगाने वाले हैं, और मैंने परीक्षण किया है

find . -follow -printf ""

जीएनयू खोजने पर, जो फार्म के छोरों को खोजने ./a -> ./bऔर ./b -> ./aत्रुटि को मुद्रित करने में सक्षम था

find: `./a': Too many levels of symbolic links
find: `./b': Too many levels of symbolic links

(इस पर भी काम किया गया a->b->c->a)

इसी तरह, फार्म की लूप ./foo/x -> ..और ./foo/a -> ./bar+ ./bar/b -> ./fooमुद्रित त्रुटियों

find: File system loop detected; `./foo/a/b' is part of the same file system loop as `./foo'.
find: File system loop detected; `./bar/b/a' is part of the same file system loop as `./bar'.
find: File system loop detected; `./foo/x' is part of the same file system loop as `.'.

यदि आप इसे पढ़ने के अलावा आउटपुट के साथ कुछ करना चाहते हैं, तो आपको इसे stderr से stdout पर पुनर्निर्देशित करना होगा और इसे कुछ स्क्रिप्ट पर पाइप करना होगा जो त्रुटि संदेशों को पार्स कर सकता है।


क्या इसका मतलब यह है कि अगर कोई लूप था तो एक त्रुटि संदेश दिखाई देगा?
व्लादिमीर

GNU के साथ और -follow, हाँ।
डेरफेक

ठीक है, लेकिन इसका उपयोग कैसे करता है कि lsवास्तविक लिंक प्राप्त करने के बजाय केवल उपयोग करने के बारे में बताएं -follow?
व्लादिमीर

1
इस तरह शेल काम करता है। आपने इसे lsअपने findकमांड के आउटपुट का उपयोग करके कमांड चलाने के लिए कहा था। आपकी findकमांड कुछ भी प्रिंट नहीं करती है, इसलिए आपके शेल lsको कुछ भी नहीं के साथ निष्पादित किया जाता है, जो वर्तमान निर्देशिका को सूचीबद्ध करता है।
डर्फ़के

DerfK का समाधान भी विंडोज 7 में साइक्लविन शेल से आह्वान करके चक्रों को खोजता है।
डॉन गेटले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.