यह वाइल्डकार्ड मेरी अपेक्षा के अनुरूप काम क्यों नहीं करता है?


11

मेरे उपयोगकर्ता फ़ोल्डर में, मेरे पास D ropbox, D ocuments, D ownloads & d ump जैसे फ़ोल्डर हैं ।

ls a*उन सभी फाइलों को सूचीबद्ध करना चाहिए जिनके नाम से शुरू होता है a। सही? लेकिन जब मैं कमांड देता हूं ls d*, तो केवल प्रदर्शित करने के बजाय dumpयह मुझे डंप निर्देशिका का एलएस दिखाता है। और जब मैं कमांड देता हूं ls D*, तब यह डी के साथ शुरू होने वाले सभी फोल्ड के एलएस प्रदर्शित करता है

तो इसे समझने में मुझे कौन सा हिस्सा याद आया?

संपादित करें: एक स्क्रीनशॉट संलग्न करना ls स्क्रीनशॉट

जवाबों:


17

बैश मैन पेज के अनुसार:

bash प्रत्येक शब्द को अक्षर *,; और [के लिए स्कैन करता है। यदि इनमें से कोई एक अक्षर दिखाई देता है, तो शब्द को एक पैटर्न के रूप में माना जाता है, और पैटर्न से मेल खाने वाले फ़ाइल नामों की वर्णानुक्रम में क्रमबद्ध सूची के साथ प्रतिस्थापित किया जाता है

और ls के लिए जानकारी नोड से

'Ls' प्रोग्राम फाइलों (किसी भी प्रकार, निर्देशिका सहित) के बारे में जानकारी को सूचीबद्ध करता है। विकल्प और फ़ाइल तर्क हमेशा की तरह, मनमाने ढंग से जुड़े हो सकते हैं।

गैर-विकल्प कमांड-लाइन तर्कों के लिए जो निर्देशिकाएं हैं, डिफ़ॉल्ट रूप से 'ls' निर्देशिका की सामग्री को सूचीबद्ध करता है, पुनरावर्ती रूप से नहीं, और 'से शुरू होने वाले नामों के साथ फ़ाइलों को छोड़ देता है।'। अन्य गैर-विकल्प तर्क के लिए, डिफ़ॉल्ट रूप से `ls 'केवल फ़ाइल नाम को सूचीबद्ध करता है। यदि कोई गैर-विकल्प तर्क निर्दिष्ट नहीं है, तो 'ls' वर्तमान निर्देशिका की सामग्री को सूचीबद्ध करता है।

इसलिए जब यो दे ls d*, d * d से शुरू होने वाली सभी फ़ाइल / निर्देशिका नामों की क्रमबद्ध सूची में विस्तारित है। तो आप कमांड बन जाइए

ls dump

और जैसा कि डंप एक निर्देशिका नाम है, इसलिए आपको निर्देशिका "डंप 'में सभी फ़ाइलों की सूची मिलती है, लेकिन जब आप देते हैं ls D*, तो " डेस्कटॉप दस्तावेज़ डाउनलोड ड्रॉपबॉक्स "में डी का विस्तार होता है , इसलिए कमांड बन जाता है

ls Desktop Documents Downloads Dropbox

और ये सभी निर्देशिकाएं हैं, आपको व्यक्तिगत निर्देशिका में फ़ाइलों की सूची मिलती है। यदि कोई फ़ाइल वर्तमान निर्देशिका में D से शुरू होती है तो उसे अलग से सूचीबद्ध किया जाएगा।


2
एक मामूली जोड़: जब एक से अधिक निर्देशिकाओं को तर्क के रूप में दिया जाता है, तो ls अपनी सामग्री को सूचीबद्ध करने से पहले प्रत्येक निर्देशिका का नाम प्रदर्शित करता है। यह एक निर्देशिका के लिए नहीं करेगा।
मार्सेल स्टिमबर्ग

धन्यवाद! इससे मेरा शक साफ़ हो गया। मैंने एक किया ls p*और यह एक फ़ाइल दिखाया क्योंकि यह मौजूद है और चित्र सार्वजनिक फ़ोल्डर ls P*दिखाता है क्योंकि पी के साथ शुरू होने वाली कोई फ़ाइल नहीं है । और जब मैंने poo नाम से एक डायरेक्टरी बनाई , तो उसमें दिखाया गया किls p*
Ashfame

7

ls d * और D * क्रमशः d * और D * से मेल करने वाली सूची फ़ाइलों और फ़ोल्डरों दोनों, व्यवहार समान है, आपके परीक्षण में कोई गलती हुई होगी।

यदि आप केवल फ़ोल्डर नामों को सूचीबद्ध करना चाहते हैं, न कि उन फ़ोल्डर सामग्री को, जिन्हें आपको "-d" का उपयोग करने की आवश्यकता है:

ls -d D*

मैंने एक स्क्रीनशॉट संलग्न किया है, कृपया एक नज़र डालें
Ashfame

0

जैसा कि ऊपर सुझाव दिया गया है, -dविकल्प जाने का रास्ता है। जोड़ा जा रहा है

alias ld='ls -d'

मेरी ~/.bashrcफ़ाइल मेरे लिए अच्छा काम करती है।


3
इस उपनाम के साथ, आप आसान पहुंच को अवरुद्ध करते हैं ld - The GNU linker, जो ओपी को कार्यक्रमों को संकलित करने और जोड़ने से रखेगा। alias lsd='ls -d'इसके बजाय उपयोग करें । कुछ करने से पहले fooहमेशा की तरह यह type fooदेखने के लिए कि fooक्या पहले से ही किसी चीज के लिए नाम के रूप में उपयोग किया जाता है, और यह तय करें कि क्या उर्फ ​​की सुविधा पिछले तक पहुंच के नुकसान को foo
खत्म कर देती है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.