क्या 'ls' कमांड के पास कोई विकल्प है जो मैं केवल निर्देशिकाओं को देखता हूं?


73

कभी-कभी, मुझे केवल निर्देशिकाओं की जांच करने की आवश्यकता है न कि फाइलें। क्या कमांड ls के साथ कोई विकल्प है? या ऐसा करने के लिए कोई उपयोगिता है?

संपादित करें : मैं मैक ओएस एक्स का उपयोग कर रहा हूं, और ls -dमेरे .पास निर्देशिका होने के बावजूद मुझे देता है ।


4
क्या कोई समझा सकता है कि ls -dकेवल काम करने के लिए ही .क्यों दिया जाता है और आखिर में क्यों */जोड़ा जाना चाहिए?
cwd

3
@cwd यदि आप कोई फाइल निर्दिष्ट नहीं करते हैं, तो lsचूक हो जाती है .। और -dइसका मतलब है कि निर्देशिका की सामग्री को प्रिंट न करें, निर्देशिका को ही प्रिंट करें।
मिकेल

1
@cwd ls -pइसका उपयोग /निर्देशिका नामों के बाद दिखाता है । तो */बस एक पैटर्न है जो निर्देशिका नाम और /कॉम्बो के खिलाफ मेल खाता है ।
पिट

मैंने अपने ~ / .bash_aliases फ़ाइल के लिए @ Steven_D के जवाब को लागू करने के लिए एक फ़ंक्शन बनाया: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6fb2727
rjurney

जवाबों:


84

मुझे पता है कि पहले से ही एक चयनित उत्तर है, लेकिन आप बस के साथ अनुरोधित व्यवहार प्राप्त कर सकते हैं ls:

ls -ld -- */

(ध्यान दें कि '-' मापदंडों के अंत को चिह्नित करता है, फ़ोल्डर के नाम को एक हाइफन के साथ शुरू करने से रोकता है ताकि आगे के विकल्प विकल्प के रूप में व्याख्या की जा सके।)

यह सभी गैर-छिपी (जब तक कि आप अपने शेल के ग्लब्स को उन्हें विस्तारित करने के लिए कॉन्फ़िगर नहीं करेंगे) निर्देशिकाओं को वर्तमान कार्य निर्देशिका में चलाएंगे जहां यह चलाया जाता है (ध्यान दें कि इसमें निर्देशिकाओं के प्रतीकात्मक लिंक भी शामिल हैं)। कुछ अन्य फ़ोल्डर के सभी उपनिर्देशिका प्राप्त करने के लिए, बस कोशिश करें:

ls -ld /path/to/directory/*/

ध्यान दें कि -l वैकल्पिक है।


5
अच्छा लगा। मैंने कभी नहीं माना कि निर्देशिकाओं /का अंत में एक निहितार्थ है - लेकिन अब जब मैं आपको उत्तर देता हूं तो यह समझ में आता है। आखिरकार, टैब-समापन हमेशा इसे जोड़ता है।
gvkv

-d for dir, -l for long format। का उद्देश्य क्या है --?
दिनेशकुमार

1
यद्यपि यह छोटा दिखता है और अधिकांश मामलों के लिए काम करता है, कोई इस दृष्टिकोण का उपयोग नहीं करना चाहता है जब एक सच्ची निर्देशिका की आवश्यकता होती है, न कि किसी निर्देशिका की सिम्लिंक की। तो findवास्तव में उस मामले में एक अच्छा विकल्प है।
बायोकैबरमैन

1
findयह भी लाभ है जब निर्देशिकाओं की संख्या अधिकतम तर्क लंबाई से अधिक हो जाती है।
स्टीवन डी

पीछे की ओर काम करते हुए, मुझे बस एहसास हुआ कि आप किसी भी चीज़ को विस्तार से अनदेखा कर सकते हैं ls -alhF --ignore=*.*:। यकीन नहीं होता कि यह 'छिपे' फोल्डर को कितनी अच्छी तरह से हैंडल करेगा, यानी.myHiddenFolder
टिम्माह

14

नहीं, लेकिन एक साधारण findआदेश यह करेगा:

find . -type d -depth 1

या grep

ls -F | grep /

यदि आवश्यक हो तो आप या तो एक या दूसरे को उर्फ ​​कर सकते हैं।


6
उबंटू 14.04 पर यह था -maxdepth 1। इसके अलावा findमुझे आदेश को find . -maxdepth 1 -type d
पलटना चाहिए

वह ls -F | grep /उपाय अद्भुत काम करता है! ऐसा लगता है कि मैं केवल अपने FreeBSD मशीन पर काम कर सकता हूं। मुझे लगता है कि मछली का उपयोग करने का मतलब है कि कुछ भी */काम नहीं कर सकता है?
cjm

मैंने कभी फिश के साथ काम नहीं किया है इसलिए मुझे इस पर यकीन नहीं है लेकिन -F विकल्प चमत्कार का काम कर सकता है।
gvkv

7

मुझे निर्देशिका संरचना पर अवलोकन प्राप्त करने के लिए पेड़ की उपयोगिता पसंद है । यह MacPorts और मेरे द्वारा आजमाए गए सभी लिनक्स वितरणों में उपलब्ध है।

tree -d -L 2

यह सभी निर्देशिकाओं को दिखाएगा, दो स्तर गहरे।


5

मुझे छिपी हुई निर्देशिकाओं को देखने की भी आवश्यकता थी ताकि मेरी आवश्यकताओं के अनुरूप सुझाव को संशोधित किया जा सके

ls -d -- */ .*/

(शेल के आधार पर, जिसमें यह भी शामिल हो सकता है ) .और..


2

के साथ zsh(जैसा कि macOS पर डिफ़ॉल्ट रूप से पाया जाता है, यह /bin/shवहां भी हुआ करता था), आप उनके आधार पर फ़ाइलों का चयन करने के लिए ग्लोब क्वालिफायर का उपयोग करेंगे:

  • गैर-छिपी निर्देशिकाओं की सूची बनाएं:

    ls -d -- *(/)
    
  • सभी निर्देशिकाओं को सूचीबद्ध करें:

    ls -d -- *(D/)
    

    ( .और ..हमेशा बाहर रखा जाता है, यदि आप उन्हें चाहते हैं तो उन्हें व्यक्तिगत रूप से जोड़ें)

  • निर्देशिकाओं के लिए सहानुभूति भी शामिल करें:

    ls -d -- *(D-/)
    

    ( -सिम्लिंक रिज़ॉल्यूशन के बाद आगे क्वालीफ़ायर लागू होता है)।


-1

मुझे लगता है कि ls मैक ओएस एक्स पर एक बग है। जीआरई का उपयोग करने के लिए एक समाधान है ... ls -l / | grep "^d"


1
यह जानना मैं केवल एक ही व्यक्ति का उपयोग करता है नहीं कर रहा हूँ अच्छा है grep "^d"हैक
माइकल Mrozek

6
जहां तक ​​मुझे पता है, वह जिस व्यवहार का वर्णन करता है वह बग नहीं है और एक ही है यदि कोई GNU ls का उपयोग कर रहा है। -D विकल्प निर्देशिका के लिए सूची प्रदर्शित करता है और सामग्री नहीं। : यह देखने के कारण है कि इस उपयोगी हो सकता है देखने के बीच का अंतर ls -l /homeऔरls -dl /home
स्टीवन डी

कैरेट खोल के लिए विशेष नहीं हैं। आप बस इस्तेमाल कर सकते हैं ls -l / | grep ^d। यदि आप उद्धरणों का उपयोग करने जा रहे हैं , चूंकि आपको पैरामीटर विस्तार की आवश्यकता नहीं है, तो उन्हें एकल उद्धरण बनाएं । ls -l / | grep '^d'। हां, मैं एक पेडेंट हूं। लेकिन वास्तव में, यह करो। :)
वाइल्डकार्ड

-1
$ ls -p | grep /

-pझंडा कर देगा lsप्रत्येक फ़ाइल नाम के बाद एक स्लैश ( `/ ') जोड़ें, तो उस फ़ाइल एक निर्देशिका है।


-2

सबसे आसान तरीका निम्न कमांड टाइप करना है। यह अधिकांश यूनिक्स और लिनक्स प्लेटफार्मों और संस्करणों में काम करता है। आप चाहें तो इसे छोड़ सकते -Fहैं, लेकिन यह वह तर्क है जो निर्देशिका नाम के अंत में / को जोड़ता है। -Cमौजूदा निर्देशिका में उन सभी को - तर्क केवल निर्देशिका नाम कैप्चर करता है। यदि आप वर्तमान मार्ग में केवल निर्देशिका और उपनिर्देशिका देखना चाहते हैं, तो बस -Rतर्क जोड़ें ( ls -CFR)।

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 

1
सभी lsकार्यान्वयनों में, जिन्हें मैं जानता हूं और POSIX विनिर्देश में ls, स्तंभों-C में आउटपुट करना है , गैर-निर्देशिका फ़ाइलों को छोड़ना नहीं है। आपके उदाहरण में, फ़ाइल नामों से पहले मुद्रित होते हैं, जो कोई कार्यान्वयन नहीं करेगा। के साथ , निर्देशिका फ़ाइलों के लिए फ़ाइल नाम में जोड़ा जाता है। /ls-F/
स्टीफन चेज़लस

जब मैंने इस उत्तर को देखा, तो मुझे आश्चर्य हुआ कि "यह कहाँ तक सच है?"
जी-मैन

-3
ls -G

यह आपकी निर्देशिकाओं को नीले रंग में दिखाएगा


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