फ़ाइल खोज में * का उपयोग


9

लिनक्स फ़ाइल के बारे में पढ़ते हुए, मुझे निम्नलिखित मिला ...

* वाइल्डकार्ड का उपयोग करते हुए फाइलों की खोज करने के लिए, अज्ञात स्ट्रिंग को * से बदलें, उदाहरण के लिए यदि आपको केवल यह याद है कि एक्सटेंशन .out था, तो ls * .out टाइप करें।

और जब मैंने सिस्टम पर निम्नलिखित कमांड की कोशिश की (ubuntu 14.04 LTS) .. मैं मिला

anupam@JAZZ:~$ ls  *.bash* 

ls: cannot access  *.bash* : No such file or directory

anupam@JAZZ:~$ ls  .bash*

.bash_history   .bash_logout  .bash_profile  .bashrc

anupam@JAZZ:~$

पहले मामले में क्यों यह ऐसी कोई निर्देशिका नहीं दिखा रहा है ( *.bash*) और अगले मामले में इसकी फाइलें दिखा रहा है ( .bash*)

मैं इस स्वाद के लिए नया हूं, और मेरे ऑटोमेटा सिद्धांत कक्षाओं (*) के अनुसार एप्सिलॉन (खाली) सहित तार के किसी भी संयोजन का मतलब है, तो क्यों दोनों मामलों में परिणाम भिन्न हैं ....?

जवाबों:


11

जब आप ऐसा करेंगे विस्तार किया जा रहा है इससे पहले कि यह करने के लिए पारित कर दिया है । यह कहना है कि अगर हमारे पास एक निर्देशिका में तीन फाइलें ( और ) हैं , तो वास्तव में चल रही है ।ls **lsabcls *ls a b c

जब बैश का विस्तार नहीं हो सकता है, तो यह कच्चे स्ट्रिंग से गुजरता है। यही कारण है कि आप वाइल्डकार्ड्स को त्रुटि में देखते हैं, साथ में एक संदेश नहीं मिला। lsशाब्दिक रूप से कॉल की गई फ़ाइल के लिए लिस्टिंग दिखाने की कोशिश की *.bash*

तो वह विस्तार क्यों नहीं हुआ? अच्छी तरह से डिफ़ॉल्ट ग्लोबिंग द्वारा (जिसे वाइल्डकार्ड विस्तार कहा जाता है) छिपी हुई फ़ाइलों को वापस नहीं करेगा। आप इसे बदल सकते हैं shopt -s dotglob(जो तब तक जारी नहीं रहेगा जब तक कि आप इसे अपने में नहीं चिपकाते हैं .bashrc- यह डिफ़ॉल्ट रूप से एक अच्छे कारण से अक्षम हो सकता है इसलिए इसके साथ सावधान रहें), यहां एक त्वरित डेमो है:

$ ls  *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls  *.bash*
.bash_aliases  .bash_history  .bash_logout  .bashrc  .bashrc.save

इसका अपवाद यह है - जैसा कि आप पहले ही दिखा चुके हैं- जब आप पहले ही स्पष्ट रूप से कह चुके हैं कि फाइलें एक पैटर्न के साथ छिपी होंगी .bash*। यह बस डिफ़ॉल्ट dotglobसेटिंग को ओवरराइड करता है :

$ shopt -u dotglob  # unset dotglob
$ ls .bash*
.bash_aliases  .bash_history  .bash_logout  .bashrc  .bashrc.save

वैसे भी उस विचित्रता के अलावा, मुझे आशा है कि इससे आपको यह समझने में मदद मिलेगी कि सतह के नीचे क्या चल रहा है।


अन्य रहे हैं shoptझंडे कि परिवर्तन कैसे काम करता है ग्लोबिंग: extglob, failglob, globstar, nocaseglobऔर nullglob। वे और अन्य shoptझंडों की एक बेड़ को बाश मैनुअल के हिस्से के रूप में प्रलेखित किया जाता है ।

इसी तरह, पैटर्न मिलान पर पेज को कुछ अच्छे पढ़ने के लिए बनाना चाहिए।

Are जब तक failglobया nullglobसेट न हों।


thanx @ ओली ,, मुझे वह सब नहीं मिला जैसा कि मैंने उल्लेख किया है कि मैं इस स्वाद के लिए नया हूँ, लेकिन मुझे इसका 80% मिला है ... इससे मुझे मदद मिली
lazarus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.