निर्देशिका में सभी प्रतीकात्मक लिंक कैसे सूचीबद्ध करें


145

मेरी /var/www/निर्देशिका में एक प्रतीकात्मक लिंक है जो वर्डप्रेस से जुड़ता है। जब मैं डायरेक्टरी ls -laसे कमांड चलाता हूं तो /var/www/वर्डप्रेस का लिंक दिखाई नहीं देता है। क्या एक निर्देशिका में सभी प्रतीकात्मक लिंक को सूचीबद्ध करने का एक तरीका है?


जवाबों:


80

आप वर्तमान निर्देशिका में मौजूद सभी प्रतीकात्मक लिंक को सूचीबद्ध करने के लिए कमांड के grepसाथ उपयोग कर सकते हैं ls

यह वर्तमान निर्देशिका में मौजूद सभी लिंक को सूचीबद्ध करेगा।

ls -la /var/www/ | grep "\->"

5
यदि आपके पास " ->" वाली फाइल है तो यह गलत पॉज़िटिव आएगा । एक सरल प्रयास करेंtouch "foo->"
सिल्वेन पिनेउ

7
कृपया अपने स्वयं के उत्तर की किसी अन्य उत्तर की सामग्री को कॉपी और पेस्ट न करें। -1
α atsнιη

3
क्यों नहीं grepसाथ ing ^l?
एलिरन मलका

3
हमेशा की तरह, सबसे अच्छा जवाब उच्चतम है
FractalSpace

अच्छा! → .बश_लियास: alias listlinks='ls -l --color | grep "\->"'8-)
फ्रैंक

283

पार्सिंग lsएक बुरा विचार है ® , findउस मामले में एक सरल पसंद करते हैं :

find . -type l -ls

केवल वर्तमान निर्देशिका को संसाधित करने के लिए:

find . -maxdepth 1 -type l -ls

क्रेडिट: मैं 'ls -A` कमांड द्वारा लौटाए गए फ़ाइल नामों को पहचानने के लिए शेल कैसे बनाते हैं, और इन नामों में रिक्त स्थान हैं?


find: Unknown argument to -type: 1
अहानिबेक्स्ड

15
@ahnbizcad: यह 1(एक) नहीं है, लेकिन l(लिंक)
सिल्वेन पिनेउ

3
बहुत बढ़िया जवाब! मैंने निर्देशिका को इस तरह से नीचे नहीं उतरने के लिए समायोजित किया: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null धन्यवाद!
BGS

3
केवल वर्तमान निर्देशिका के लिए (यानी पुनरावर्ती नहीं ) जोड़ें -maxdepth 1
जोशुआ पिंटर

1
@ cig0 u का उपयोग करने की आवश्यकता नहीं है awk, u शायद यही चाहते हैं:find . -maxdepth 1 -type l | sort -n
sobi3ch

10

ls -laआदेश, सभी फ़ाइलों और फ़ोल्डरों और भी प्रतीकात्मक जुड़ा हुआ निर्देशिका दिखाते हैं कि यदि इस आदेश का किसी भी प्रतीकात्मक निर्देशिका यह मतलब है कि आप के लिए एक प्रतीकात्मक लिंक नहीं है प्रदर्शित नहीं करता है वर्डप्रेस

चलाने का परिणाम देखें ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

आप देखेंगे कि सभी प्रतीकात्मक निर्देशिका को lअनुमति झंडे की भीख माँगने की अनुमति है। और अगर आप अपने साथ एक grep लेते हैं तो ^lकेवल प्रतीकात्मक फाइलें या निर्देशिका सूचीबद्ध कर सकते हैं:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

ड्राइवर और सबसिस्टम निर्देशिका यहाँ की अन्य निर्देशिका का प्रतीकात्मक लिंक है।


1
माइनर विनिर्देश यहाँ ... अनुमतियाँ स्ट्रिंग का पहला वर्ण वास्तव में अनुमति नहीं है। यह फ़ाइल प्रकार है। जैसा कि आपने कहा है lकि यह एक प्रतीकात्मक लिंक है।
conner.xyz

5

grep आपका दोस्त है:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

यह "एल" से शुरू होने वाली लाइनों को सूचीबद्ध करेगा जो निर्देशिकाओं और फ़ाइलों के लिए lउपयोग के स्थान पर परमिट कॉलम में लिंक का प्रतिनिधित्व करता हैd-



1

एक निर्देशिका में प्रतीकात्मक लिंक देखने के लिए:

  1. एक टर्मिनल खोलें और उस निर्देशिका में जाएं।

  2. कमांड टाइप करें:

    ls -la
    

    यह निर्देशिका की सभी फाइलों को लंबी सूची में रखेगा भले ही वे छिपी हों।

  3. आपके द्वारा शुरू की जाने वाली फाइलें lआपकी प्रतीकात्मक लिंक फाइलें हैं।


1
-1: कासिया का जवाब पहले से ही इसे कवर करता है।
मूरू

1

यह सभी प्रतीकात्मक रूप से लिंक की गई वस्तुओं (दोनों dirs और fns) को एक निर्देशिका में लौटाता है:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

हालाँकि, वास्तविक रूप से लिंक किए गए आइटम प्रकारों के बीच अंतर करने के लिए:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

केवल प्रतीकात्मक रूप से लिंक किए गए फ़ाइल नाम को लौटाता है। तथा,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

प्रतीकात्मक रूप से लिंक किए गए dirname आइटम ही लौटाता है।


0

टाइप करें ls -lai, यह सभी फाइलों और उपनिर्देशिकाओं को संबंधित इनकोड संख्याओं के साथ सूचीबद्ध करेगा। आपको पता है कि समान इनोड संख्या वाली फाइलें लिंक (हार्ड या सॉफ्ट) हैं और यह समाधान प्रतीकात्मक लिंक के लिए भी काम करता है।


ls -laiकरता नहीं एक फ़ाइल और इसकी सांकेतिक लिंक के लिए एक ही आईनोड संख्या दिखाते हैं। हार्ड लिंक के विपरीत, प्रतीकात्मक लिंक की अपनी अलग इनोड प्रविष्टियों है। यह है जो ऐसा लग रहा है।
एलियाह कगन

0

अजगर के साथ भी किया जा सकता है:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

नमूना रन:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

यह os.walkफ़ंक्शन के माध्यम से पुनरावर्ती होने के लिए बढ़ाया जा सकता है , लेकिन यह एक सूची में लिंक सूचीबद्ध करने के लिए सरल सूची पीढ़ी का उपयोग करने के लिए पर्याप्त है जैसा कि मैंने ऊपर दिखाया।

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