क्या वर्तमान निर्देशिका की उपनिर्देशिकाओं को सूचीबद्ध करने का एक सही तरीका है?


10

मैं किसी निर्देशिका की उपनिर्देशिकाएँ ढूँढ सकता हूँ

ls -d -- */

या

ls -l | grep "^d"

लेकिन ये दोनों अप्रत्यक्ष लगते हैं, और मुझे लगता है कि सिर्फ निर्देशिकाओं को खोजने के लिए एक मानक तरीका होगा। क्या ऐसा करने का एक सही तरीका है? और यदि नहीं, तो क्या इन दोनों से किनारे के मामलों में अवांछनीय व्यवहार होगा? (प्रतीकात्मक लिंक, छिपी निर्देशिका, आदि)

जवाबों:


17

इसका उत्तर इस बात पर अधिक निर्भर करेगा कि आप जिस चीज की तलाश कर रहे हैं, उसकी तुलना में आउटपुट के साथ क्या करना चाहते हैं। यदि आप टर्मिनल पर दृश्य संदर्भ के लिए एक सूची देखना चाहते हैं, तो आपका पहला समाधान वास्तव में बहुत अच्छा है। यदि आप आउटपुट को संसाधित करना चाहते हैं, तो आपको दूसरी विधि का उपयोग करने पर विचार करना चाहिए।

किसी अन्य प्रोग्राम में फीड करने के लिए सूची प्राप्त करने के सबसे मजबूत तरीकों में से एक का उपयोग करना है find

find -maxdepth 1 -type d

फ़ीड्स के लिए यह अच्छा है कारण यह है कि findउपयोग करने वाले डेटा को आउटपुट कर सकते हैं -print0या उपयोग करने वाले अन्य प्रोग्राम्स के तर्क के रूप में स्ट्रिंग को ठीक से बच सकते हैं -exec। क्यों इस ls के उत्पादन को पार्स से बेहतर है पर संदर्भ के लिए, देखें ParsingLS ग्रेग के विकी पर।


4
मुझे इसे find . -maxdepth 1 -type dOS X Yosemite पर काम करने के लिए टाइप करना था ।
सीन लेविन

1
उप-निर्देशिकाओं को सूचीबद्ध करने के लिए, किसी को -mindepth को भी निर्दिष्ट करना होगा find . -maxdepth 1 -mindepth 1 -type d। अन्यथा, वर्तमान निर्देशिका .को शामिल किया जाएगा।
टिनिअक्स

5

FYI करें - ZSH (लेकिन BASH नहीं) में, आप यह भी कर सकते हैं ls -d -- *(/):; संशोधक केवल ग्लोब निर्देशिका के लिए ZSH बताता है।(/)

उस ने कहा, यह आपके अपने प्रस्तावित समाधान ( ls -d -- */) से बहुत अलग नहीं है , और यह मानक से बहुत दूर है।

के रूप में दूर के उत्पादन ls(जो शायद अन्य झंडे के आधार पर अलग है):

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2

zsh सभी फ़ाइलों और निर्देशिकाओं के लिए तारांकन चिह्न का विस्तार करता है, (/) ध्वज उस विस्तार के कुछ हिस्सों का चयन करता है इसलिए ls * (/) भी काम करेगा, साथ ही गूंज * (/) , या अधिक zshly तरीके से प्रिंट -l * (/) ) । दो पहले संस्करण भी बाश में काम करते हैं।
थोर

1
ध्यान दें कि *(/)गैर-छिपी निर्देशिकाओं में */विस्तार होता है जबकि गैर-छिपी निर्देशिकाओं के लिए विस्तारित होता है या निर्देशिकाओं के लिए सहानुभूति (या पथ के लिए कम से कम सहानुभूति होती है जिसके लिए हम बता सकते हैं कि वे निर्देशिकाएं हैं)।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.