वर्तमान निर्देशिका में सभी सॉफ्ट लिंक (प्रतीकात्मक लिंक) कैसे खोजें?


10

प्रश्न शेल-स्क्रिप्टिंग से संबंधित है bash

एक स्क्रिप्ट के साथ कैसे जांचें कि वर्तमान निर्देशिका के भीतर कौन सी फाइलें सॉफ्ट लिंक हैं?

मामले में मैंने गलत शब्द का उपयोग किया है, जब मैं नरम लिंक कहता हूं, तो मैं उपयोग की गई फ़ाइलों का उल्लेख कर रहा हूं ln -s

केवल एक चीज जो मैं सोचने में कामयाब रहा हूं, वह ls -laएक अभिव्यक्ति के रूप में मूल्यांकन करना है, और इसके परिणामों को पार्स करना है, लेकिन स्पष्ट रूप से यह सबसे अच्छा समाधान नहीं है।


1
उन्हें "प्रतीकात्मक लिंक" के रूप में जाना जाता है ("हार्ड लिंक" के विपरीत)।
अगली सूचना तक रोक दिया गया।

राइटो, मुझे पता था कि मुझे शायद गलत शब्द मिल गया है, सिर ऊपर करने के लिए धन्यवाद
bguiz

सॉफ्ट लिंक ठीक भी है, लेकिन एक जगह के साथ। :-) ( en.wikipedia.org/wiki/Symbolic_link )
अर्जन

जवाबों:


14

देखें 'सशर्त अभिव्यक्ति' में man bash- इस मामले में आप चाहते हैं -h:

for file in *
do
  if [ -h "$file" ]; then
    echo "$file"
  fi
done

2
faqs.org/docs/bashman/bashref_68.html - सशर्त अभिव्यक्तियों के लिए मैन पेज की तुलना में बेहतर पढ़ा जाता है।
मानोस डिल्वेरेकिस

धन्यवाद @Polsy और @Manos! test -hमैं क्या चाहता था!
बुगिज़

14

आपको वास्तव में स्क्रिप्ट की आवश्यकता नहीं हो सकती है। किसी भी बाल फ़ोल्डर में पुनरावृत्ति किए बिना, केवल वर्तमान फ़ोल्डर में किसी भी प्रतीकात्मक लिंक को दिखाने के लिए:

खोजो। -Maxdepth 1 -टाइप L -print

या, कुछ और जानकारी प्राप्त करने के लिए:

खोजो। -Maxdepth 1 -टाइप l -exec ls -ld {} +
खोजो। -मैक्सडीप 1 -टाइप l -print0 | xargs -0 एलएस-बड़ा

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

खोजो। -Maxdepth 1 -exec readlink {} +
खोजो। -मक्षदीप १-छाप ० | xargs -0 रीडलिंक

ध्यान दें कि ऊपर -exec ... +और की xargs ...तुलना में बहुत तेज हैं -exec ... \;। पसंद:

समय पाएं / usr / bin -maxdepth 1 -type l -exec ls -ld {} \;
वास्तविक 0m0.372s
उपयोगकर्ता 0m0.087s
sys 0m0.163s

समय पाएं / usr / bin -maxdepth 1 -type l -exec ls -ld {} +
असली 0m0.013s
उपयोगकर्ता 0m0.004s
sys 0m0.008s

समय पाएं / usr / bin -maxdepth 1 -type l -print0 | xargs -0 एलएस-बड़ा
वास्तविक 0m0.012s
उपयोगकर्ता 0m0.004s
sys 0m0.009s

मुझे आपके लिए पॉलि का उत्तर बेहतर, अभी भी +1 अच्छा लगा, क्योंकि मुझे किसी दिन इसे शेल स्क्रिप्ट के बाहर करने की आवश्यकता हो सकती है।
11

1
आप जरूरी xargs की जरूरत नहीं है। आप सिर्फ खोज का उपयोग कर सकते हैं। -Maxdepth 1 -exec readlink {} \;
stib

यह सच है, @stib, लेकिन xargsहै एक बहुत अपने Mac पर तेजी; मेरा संपादन देखें लेकिन मैंने आज कुछ नया सीखा: +इसके बजाय भी है \;(हालांकि कुछ का दावा है कि इसके साथ समस्याएं हैं / हैंgrep )।
Arjan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.