मुझे एक निर्देशिका ट्री में सभी सिमिलिंक कैसे मिलते हैं?


253

मैं अपनी वेबसाइट के लिए डायरेक्टरी ट्री के भीतर सभी सिम्बलिंक खोजने की कोशिश कर रहा हूं। मुझे पता है कि मैं यह करने के findलिए उपयोग कर सकता हूं लेकिन मैं यह पता नहीं लगा सकता कि निर्देशिकाओं की पुनरावृत्ति कैसे की जाए।

मैंने इस कमांड की कोशिश की है:

find /var/www/ -type l

... और बाद में मुझे पता चला कि सामग्री /var/wwwसीमलिंक हैं, इसलिए मैंने कमांड को इसमें बदल दिया है:

find -L /var/www/ -type l

इसे चलाने में थोड़ा समय लगता है, हालांकि मुझे कोई मैच नहीं मिल रहा है।

उपनिर्देशिकाओं की जांच करने के लिए मुझे यह कैसे मिलेगा?

जवाबों:


299

यह /path/to/folderनिर्देशिका को फिर से आगे बढ़ाएगा और केवल प्रतीकात्मक लिंक को सूचीबद्ध करेगा:

ls -lR /path/to/folder | grep ^l

यदि आपका इरादा प्रतीकात्मक लिंक का भी पालन करना है, तो आपको अपनी findकमांड का उपयोग करना चाहिए लेकिन आपको -Lविकल्प शामिल करना चाहिए ; वास्तव में findमैन पेज कहता है:

   -L     Follow symbolic links.  When find examines or prints information
          about files, the information used shall be taken from the  prop‐
          erties  of  the file to which the link points, not from the link
          itself (unless it is a broken symbolic link or find is unable to
          examine  the file to which the link points).  Use of this option
          implies -noleaf.  If you later use the -P option,  -noleaf  will
          still  be  in  effect.   If -L is in effect and find discovers a
          symbolic link to a subdirectory during its search, the subdirec‐
          tory pointed to by the symbolic link will be searched.

          When the -L option is in effect, the -type predicate will always
          match against the type of the file that a symbolic  link  points
          to rather than the link itself (unless the symbolic link is bro‐
          ken).  Using -L causes the -lname and -ilname predicates  always
          to return false.

फिर यह प्रयास करें:

find -L /var/www/ -type l

यह शायद काम करेगा: मैंने findइस हीरे के मैन पेज में पाया : यदि आप -typeविकल्प का उपयोग कर रहे हैं तो आपको इसे -xtypeविकल्प में बदलना होगा :

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

फिर:

find -L /var/www/ -xtype l

1
धन्यवाद, यह शायद काम करेगा हालांकि मैंने अभी देखा कि / var / www / की सामग्री पहले से ही सहानुभूति है और यह उन निर्देशिकाओं में पुनरावृत्ति नहीं करता है।
हफिचुक

4
@hafichuk मेरे उत्तर में अंतिम संपादन देखें ( find -L /var/www/ -xtype l)। -xtypeइसके बजाय का उपयोग -typeअपने खोज में चाल करना चाहिए। शुभ लाभ!
ztank1013

3
बनाओ कि ls -laR /path/to/folder | grep ^lअगर तुम भी "छिपा" डॉट फ़ोल्डरों को संसाधित करना चाहते हैं ...
9

2
धन्यवाद! लेकिन यह केवल लिंक का नाम दिखाता है, लेकिन उनका स्थान नहीं।
कोस्टानोस

8
Mac OSX (10.9) में -xtypeउपलब्ध नहीं है। find . -type lलगता है पुनरावर्ती जाँच कर रहा है।
amertkara

227

एक कमांड, कोई पाइप नहीं

find . -type l -ls

स्पष्टीकरण: find वर्तमान निर्देशिका .से -type lस्याही के सभी संदर्भ और -lsविस्तार से उन लोगों की सूची । सादा और सरल...

इस उत्तर पर विस्तार करते हुए, यहां कुछ और प्रतीकात्मक लिंक संबंधित findआदेश दिए गए हैं:

एक विशिष्ट लक्ष्य के लिए प्रतीकात्मक लिंक प्राप्त करें

find . -lname link_target

ध्यान दें कि link_targetएक पैटर्न है जिसमें वाइल्डकार्ड वर्ण हो सकते हैं।

टूटे हुए प्रतीकात्मक लिंक का पता लगाएं

find -L . -type l -ls

-Lविकल्प का निर्देश findसांकेतिक लिंक, जब तक कि जब टूट का पालन करें।

टूटे हुए प्रतीकात्मक लिंक खोजें और बदलें

find -L . -type l -delete -exec ln -s new_target {} \;

अधिक उदाहरण मिलते हैं

अधिक findउदाहरण यहां देखे जा सकते हैं: https://hamwaves.com/find/


7
यदि आप अधिक रसीला लग रहे हैं, तो यह ध्यान देने योग्य है कि अधिकांश संस्करणों में findएक -lsविकल्प होता है। तो find . -type l -lsऊपर के बराबर होना चाहिए।
ब्राचली

7
यह स्वीकार किए गए उत्तर पर सुधार करता है क्योंकि यह आपको यह भी बताता है कि सहानुभूति निर्देशिका के पेड़ में कहाँ हैं, विशेष रूप से महत्वपूर्ण जब जटिल और गहरे पेड़ के साथ काम कर रहे हैं जैसा कि सहानुभूति होने की संभावना है।
जेसी क्रॉसेन

2
बेहतर है कि प्रश्न को बेहतर उत्तर के रूप में स्वीकार किया जाए।
लॉर्ड_ड्रॉन

3
यह उत्तर स्वीकृत की तुलना में कहीं अधिक उपयोगी है। इसके अलावा, यदि आप कुछ निर्देशिका में फ़ाइलों को इंगित करने वाली सहानुभूति ढूंढना चाहते हैं find -lname '*/dir/*' -printf '%P -> %l\n':। यह ध्यान देने योग्य है कि link_target एक पैटर्न है।
x- यूरी

1
यह मेरे प्रकार का उत्तर है। सादा और सरल। धन्यवाद।
त्रयूटीद्रिष्ट

11

find पहले से ही डिफ़ॉल्ट रूप से पुनरावर्ती दिखता है:

[15:21:53 ~]$ mkdir foo
[15:22:28 ~]$ cd foo
[15:22:31 ~/foo]$ mkdir bar
[15:22:35 ~/foo]$ cd bar
[15:22:36 ~/foo/bar]$ ln -s ../foo abc
[15:22:40 ~/foo/bar]$ cd ..
[15:22:47 ~/foo]$ ln -s foo abc
[15:22:52 ~/foo]$ find ./ -type l
.//abc
.//bar/abc
[15:22:57 ~/foo]$ 

यह शायद उन गोचरों में से एक है, जो कि सभी फाइलों / var / www में सिम्लिंक हैं। क्या findडिफ़ॉल्ट रूप से उन लोगों की पुनरावृत्ति होती है? मैं अनुमान नहीं लगा रहा हूँ;)
hafichuk

हां, शायद लूपिंग से बचने के लिए।
Jman

मैंने -Lबिना किसी अनुमान के - किसी भी अनुमान के लिए ध्वज का उपयोग करने के लिए अपडेट किया है ?
hafichuk

सही समाधान, और यह लिंक का स्थान दिखाता है। धन्यवाद!
कोस्टानोस

8

खुद को सिर्फ सिम्बलिंक्स देखने के लिए, आप उपयोग कर सकते हैं

find -L /path/to/dir/ -xtype l 

यदि आप यह भी देखना चाहते हैं कि वे कौन सी फाइलों को लक्षित करते हैं, तो बस एक ls संलग्न करें

find -L /path/to/dir/ -xtype l -exec ls -al {} \;

6

यह अब तक मुझे मिली सबसे अच्छी बात है - आपको वर्तमान निर्देशिका में सहानुभूति दिखाती है, पुनरावर्ती रूप से, लेकिन उनका अनुसरण किए बिना, पूर्ण पथ और अन्य जानकारी के साथ प्रदर्शित:

find ./ -type l -print0 | xargs -0 ls -plah

आउटपुट इस तरह दिखता है:

lrwxrwxrwx 1 apache develop 99 Dec  5 12:49 ./dir/dir2/symlink1 -> /dir3/symlinkTarget
lrwxrwxrwx 1 apache develop 81 Jan 10 14:02 ./dir1/dir2/dir4/symlink2 -> /dir5/whatever/symlink2Target
etc...

0

मैं अपनी बिन निर्देशिका में एक स्क्रिप्ट बनाता हूं जो एक उपनाम की तरह है। उदाहरण के लिए मेरे पास एक स्क्रिप्ट है जिसका नाम lsd ls -l | grep ^ d

आप एक lsl बना सकते हैं ls -lR | grep ^ l

बस उन्हें + x को चकमा दें और आप जाने के लिए अच्छे हैं।

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