आपकी अपेक्षाएँ डॉस थिंक / विंडोज थिंक पर आधारित हैं और गलत हैं। एमएस-डॉस, विंडोज, और वास्तव में कुछ अन्य आईबीएम / माइक्रोसॉफ्ट ऑपरेटिंग सिस्टम पर, वाइल्डकार्ड का विस्तार कमांड द्वारा ही किया जाता है, और /a
विकल्प जैसी चीजें dir
वाइल्डकार्ड विस्तार के दौरान विशेषता फिल्टर के रूप में कार्य करती हैं। dir
वाइल्डकार्ड का विस्तार करता है *
, जिसे कमांड दुभाषिया पास-के रूप में पास करता है, और यदि /a
निर्दिष्ट किया जाता है तो यह उचित फिल्टर को लागू करता है जो वापस आ गया है। (कुछ ऑपरेटिंग सिस्टमों पर, एक निर्देशिका और ऑपरेटिंग सिस्टम कर्नेल, या इसके फाइल सिस्टम ड्राइवरों को एन्यूमरेट करने के लिए सिस्टम कॉल को विशेषता फिल्टर दिया जा सकता है, उन्हें स्वयं लागू करता है।)
यूनिक्स पर और लिनक्स पर, वाइल्डकार्ड विस्तार शेल द्वारा किया जाता है, और अनुमतियों से अनजान है। जब, रूट डायरेक्टरी में, आप करते हैं
ls *
शेल से ls
स्वयं को क्या प्राप्त होता है (कुछ ऐसा है)
ls बिन घर ऑप्ट var बूट देव tmp आदि खो + रूट usr मिला
जो -d
/ --directory
विकल्प करता है वह बंद हो जाता है जो आम तौर पर आगे होता है । आम तौर पर आगे क्या होता है ls
, इसके प्रत्येक तर्क को बारी-बारी से देखता है, देखता है कि वे निर्देशिका हैं, और अपनी सामग्री को एन्यूमरेट करने का निर्णय लेते हैं। फ़ाइलों को नाम देने वाले तर्कों के लिए, यह केवल फ़ाइल के लिए जानकारी प्रिंट करता है। -d
विकल्प के साथ , निर्देशिकाओं को फ़ाइलों की तरह ही व्यवहार किया जाता है। तो ls
प्रत्येक निर्देशिका के लिए जानकारी को प्रिंट करता है जो कि उसके तर्कों के रूप में पारित हो जाती है, जैसे कि यदि वे फाइलें थीं तो यह करेंगे।
तो -d
नहीं है एक "केवल निर्देशिका प्रिंट" विकल्प। वास्तव में, न केवल ऐसा कोई विकल्प है; वहाँ नहीं हो सकता इस तरह के एक विकल्प। वाइल्डकार्ड का विस्तार शेल द्वारा किया जाता है, और (POSIX sh
में कम से कम) शेल को अनुमति की जांच करने और बिट्स टाइप करने की कोई विधि नहीं है जब यह *
नामों की सूची में फैलता है । अकेले निर्देशिकाओं के नामों की सूची प्राप्त करने के लिए, या तो find
कमांड का उपयोग करना आवश्यक है , जैसा कि समझाया गया है ztank1013
, या उस चाल का उपयोग करने के लिए जो स्लैश के साथ समाप्त होने वाला मार्ग निर्देशिका प्रविष्टि का अर्थ है .
, जैसा कि समझाया गया है Jin
। ( Jin
'' ट्रिक ls
कमांड प्राप्त करने के साथ तर्कों को समाप्त करता है
ls बिन / घर / ऑप्ट / var / बूट / देव / tmp / etc / खो + पाया / जड़ / usr /
क्योंकि पैटर्न */
वास्तव में दो घटकों के साथ मेल खाने वाले पथनामों में है, दूसरा खाली है, और इसलिए ऐसा नहीं है जो वांछित था। विशेष रूप से, यह निर्देशिकाओं की ओर इशारा करते हुए प्रतीकात्मक लिंक का इलाज करेगा जैसे कि वे निर्देशिका थे।)
ls -d
बिना किसी के व्यवहार के *
ऊपर का एक सरल विस्तार है। बस इसके बारे में एक और बात जाननी होगी ls
: जब इसे कोई तर्क नहीं दिया जाता है, तो यह एक डिफ़ॉल्ट तर्क मानता है .
। अब बिना-d
विकल्प, द्वारा नामित निर्देशिका की सामग्री के लिए ऊपर उल्लिखित व्यवहार होता है .
प्रगणित किया जा रहा है और इसकी सामग्री के लिए जानकारी का प्रदर्शन किया। साथ-d
विकल्प, निर्देशिका .
व्यवहार किया जाता है बस के रूप में अगर यह एक फ़ाइल थे, और अपने स्वयं के बारे में जानकारी प्रदर्शित किया जाता है, न कि उसकी सामग्री को प्रगणित।