मैं केवल निर्दिष्ट पथ में निर्देशिकाओं को सूचीबद्ध करना चाहता हूं ( ls
ऐसा कोई विकल्प नहीं है)। इसके अलावा, क्या यह एकल पंक्ति कमांड के साथ किया जा सकता है?
मैं केवल निर्दिष्ट पथ में निर्देशिकाओं को सूचीबद्ध करना चाहता हूं ( ls
ऐसा कोई विकल्प नहीं है)। इसके अलावा, क्या यह एकल पंक्ति कमांड के साथ किया जा सकता है?
जवाबों:
ls -d */
वर्तमान निर्देशिका के भीतर निर्देशिकाओं को सूचीबद्ध करने का प्रयास करें
ls -al | grep '^d'
- यह बहुत अधिक रसीला है।
*/
बलों केवल एक फ़ॉर्वर्ड स्लैश, जो इस मामले में एक निर्देशिका होगा के साथ समाप्त भले ही आइटम के प्रदर्शन -F
का विकल्प ls
नहीं किया जाता है। के व्यवहार के समान है ls *php
और यह कैसे php
एक निर्देशिका में समाप्त होने वाली सभी फाइलों को प्रदर्शित करता है ।
echo */
भी ऐसा ही करेंगे
इसे इस्तेमाल करे:
find . -maxdepth 1 -type d
ls
समाधानों के विपरीत , find
केवल काम करने के लिए ज़िम्मेदार है (शेल वाइल्डकार्ड विस्तार पर निर्भर नहीं है, जो सीमाएं लगा सकता है)। यह भी एक बहुत अधिक संक्षिप्त है।
find * -maxdepth 0 -type d
:।
find
आमतौर पर केवल फ़ोल्डर्स को गहराई से आउटपुट करता है 1.
निम्नलिखित
find * -maxdepth 0 -type d
मूल रूप से '*' के विस्तार को फ़िल्टर करता है, अर्थात वर्तमान dir में सभी प्रविष्टियाँ, -type d
शर्त द्वारा ।
लाभ यह है कि, आउटपुट समान है ls -1 *
, लेकिन केवल निर्देशिकाओं और प्रविष्टियों के साथ डॉट के साथ शुरू नहीं होता है
आप उपयोग कर सकते हैं ls -d */
याtree -d
एक और समाधान ग्लोबिंग होगा लेकिन यह उस शेल पर निर्भर करता है जिसका आप उपयोग कर रहे हैं और यदि निर्देशिका के लिए ग्लोबिंग समर्थित है।
उदाहरण के लिए ZSH:
zsh # ls *(/)
tree
?
tree
डिफ़ॉल्ट रूप से स्थापित नहीं है (हालांकि यह रिपॉजिटरी में है)।
tree
कमांड एक देशी यूनिक्स कमांड नहीं है (कृपया मुझे सही करें अगर मैं गलत हूं)।
चूंकि इसे करने के दर्जनों तरीके हैं, यहाँ एक और है:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
आप एक उपनाम बना सकते हैं और इसे प्रोफ़ाइल फ़ाइल में डाल सकते हैं
alias ld="ls -l| grep '^d'"
निर्देशिका की सूची प्राप्त करने के लिए इसका उपयोग करें
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
यदि आप उपनिर्देशिकाओं में पुनरावृत्ति नहीं करना चाहते हैं, तो आप इसके बजाय यह कर सकते हैं:
find specifiedpath -type d -mindepth 1 -maxdepth 1
ध्यान दें कि "डॉट" निर्देशिका (जिसका नाम शुरू होता है .
) को भी सूचीबद्ध किया जाएगा; लेकिन नहीं विशेष निर्देशिका .
है और न ही ..
। यदि आप "डॉट" निर्देशिका नहीं चाहते हैं, तो आप grep
उन्हें बाहर निकाल सकते हैं:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepth
से छुटकारा पाने के लिए उल्लेख के लिए Upvote .
! 😁
उत्तर आपके शेल पर निर्भर करेगा ।
में zsh
, उदाहरण के लिए, आप निम्न कर सकते हैं:
echo *(/)
और वर्तमान कार्यशील निर्देशिका के भीतर सभी निर्देशिकाओं को प्रदर्शित किया जाएगा।
man zshexpn
अधिक जानकारी के लिए देखें ।
एक वैकल्पिक दृष्टिकोण का उपयोग करना होगा find(1)
, जो अधिकांश यूनिक्स स्वादों पर काम करना चाहिए:
find . -maxdepth 1 -type d -print
find(1)
कई उपयोग हैं, तो मैं निश्चित रूप से सिफारिश करेंगे man find
।
इसे पूरा करने के लिए आप tree
इसके d
स्विच के साथ कमांड का उपयोग कर सकते हैं ।
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
man tree
अधिक जानकारी के लिए देखें ।
tree
। ओह ठीक है, किसी की गड़गड़ाहट चोरी करने का मेरा इरादा नहीं था।
अगर मेरे पास यह निर्देशिका है:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
सभी निर्देशिकाएं प्राप्त करने के लिए, लिंक को हल करने के लिए -L का उपयोग करें:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
बिना -L:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
conf_nagios निर्देशिका अनुपलब्ध है।
यह मेरे लिए काम कर रहा है:
`ls -F | grep /`
(लेकिन, मैं echo */
@nos द्वारा बताए अनुसार स्विच कर रहा हूं)
बैश में:
ls -d */
सभी निर्देशिकाओं को सूचीबद्ध करेगा
ls -ld */
सभी निर्देशिकाओं को लंबे रूप में सूचीबद्ध करेगा
ls -ld */ .*/
छिपी निर्देशिकाओं सहित सभी निर्देशिकाओं को लंबे रूप में सूचीबद्ध करेगा।
मैंने हाल ही में zsh (MacOS कैटालिना) पर स्विच किया है, और पाया कि:
ls -ld */ .*/
यदि वर्तमान निर्देशिका में कोई छिपी हुई निर्देशिका नहीं है तो कोई काम नहीं करता है ।
zsh: no matches found: .*/
यह उपरोक्त त्रुटि प्रिंट करेगा, लेकिन किसी भी निर्देशिका को प्रिंट करने में विफल होगा।
ls -ld *(/) .*(/)
साथ ही उसी तरह से फेल हो जाता है।
अब तक मैंने पाया है कि यह:
ls -ld */;ls -ld .*/
एक अच्छा काम है। ;
एक कमांड विभाजक है। लेकिन इसका मतलब यह है कि अगर कोई छिपी हुई निर्देशिका नहीं है, तो यह निर्देशिकाओं को सूचीबद्ध करेगा, और फिर भी छिपी हुई निर्देशिकाओं के लिए त्रुटि को प्रिंट करेगा:
foo
bar
zsh: no matches found: .*/
ls
वर्तमान निर्देशिका की सूची सामग्री के लिए शेल कमांड
-l
है यह निर्दिष्ट करने के लिए कि आप लॉन्गफ़ोर्ड (एक आइटम प्रति पंक्ति + एक अन्य ठंडी जानकारी का एक गुच्छा)
-d
में सूचीबद्ध करना चाहते हैं, सभी निर्देशिकाओं को "फाइलों के रूप में" सूचीबद्ध करने के लिए झंडा है और पुनरावृत्ति नहीं
*/
है तर्क 'एक स्लैश में समाप्त होने वाली सभी फ़ाइलों की सूची'
*
"कुछ भी" के लिए एक सरल रेगेक्स कमांड है, इसलिए */
शेल को "/ 'में समाप्त होने वाली किसी भी चीज़ को सूचीबद्ध करने के लिए कह रहा है।
man ls
अधिक जानकारी के लिए देखें ।
मैंने इसे रखा:
alias lad="ls -ld */;ls -ld .*/"
मेरे .zshrc में, और यह ठीक काम करने लगता है।
नोट: मैंने यह भी पता लगाया है
ls -ld .*/ 2> /dev/null
काम नहीं करता है, क्योंकि यह अभी भी टर्मिनल को sterr प्रिंट करता है। मैं अपना जवाब अपडेट करूंगा कि क्या / जब मुझे कोई समाधान मिल जाए।
एक निर्दिष्ट पथ में केवल निर्देशिकाओं को सूचीबद्ध करने के लिए, बस ls -l टाइप करें grep drw
drw
, और किसी भी निर्देशिका को शामिल नहीं करेगा जो स्वामी-पठनीय और लिखने योग्य नहीं है। grep ^d
बेहतर काम करता है।
निर्देशिकाओं की लंबी सूची
लिस्टिंग निर्देशिका
- ls -d * /