2012-02-08 10 views
10

मैं किसी स्क्रिप्ट में विरोध के रूप में टर्मिनल में, कुछ फ़ोल्डर और किसी सबफ़ोल्डर में सभी पीडीएफ फाइलों को ढूंढने की कोशिश कर रहा हूं। मैं लिनक्स के लिए भी काफी नया हूं, इसलिए माफी माँगता हूं अगर मुझे कुछ खास याद आती है, या शायद मेरी विशेष समस्या का निदान करने के लिए महत्वपूर्ण है।किसी निश्चित पैटर्न से मेल खाने वाली सभी फ़ाइलों को खोजने के लिए ls के साथ ग्लोबिंग

मैं बैश 4.1.5 (1) -release (i486-पीसी-linux-gnu) का उपयोग कर रहा है, और ग्लोब और extglob भाव के बारे में गूगल पर के बारे में कुछ poking किया है, और यह वाक्य रचना मैं का उपयोग करना चाहिए प्रकट होता है हालांकि यह कुछ भी नहीं पाता है के बाद से वहाँ कोई वर्तमान फ़ोल्डर ./ में पैटर्न *.pdf मिलान फ़ाइल है

$ ls **.pdf 

है;

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

PDF को कहीं और सब-फ़ोल्डर के बीच 1 और 5 गहरी (हर सबफ़ोल्डर 1-गहरे में विशेष रूप से), जिनमें से कुछ मैं जाँच करके देख सकते हैं कर रहे हैं,: इसे पढ़ने के लिए *** के रूप में चाहते हैं के लिए प्रकट होता

$ ls */*.pdf 

इसलिए, ls ठीक से काम कर रहा प्रतीत होता है। इसका मैनुअल बहुत उपयोगी नहीं प्रतीत होता है, क्योंकि मैं देख सकता हूं कि ls पर -R ध्वज के साथ हम किसी भी प्रयोग का उपयोग कर सकते हैं, जो उपरोक्त किसी भी मामले में समस्या का समाधान नहीं करता है।

मैंने extglob पैटर्न का उपयोग करने की कोशिश की (सुनिश्चित करें कि उन्हें shopt के साथ चालू करें)। मैं ls */*?(.)pdf के साथ अपनी गहराई-1 फाइलें देख सकता हूं, लेकिन मैं ls .*(/*)pdf या ls .*(/*).pdf के साथ कुछ भी नहीं देख सकता, यहां तक ​​कि एक उपनिर्देशिका के भीतर भी जहां पीडीएफ हैं।

मैंने कहीं और पढ़ा है (.gitignore फ़ाइल को एक गिट भंडार में संदर्भित करता है) कि ** पैटर्न हर किसी के लिए काम नहीं करता है।

क्या यह मुझे प्रभावित कर सकता है, और मैं इसे कैसे उपाय कर सकता हूं (आदर्श रूप से सुपरसुर विशेषाधिकारों के बिना)? क्या यह (या कुछ संबंधित समस्या) extglob कार्यक्षमता को भी प्रभावित कर सकता है?

उत्तर

13

के लिए के बजाय आप

012 लगता है पर विचार कर सकते
find . -name '*.pdf' -exec ls -l {} \; 

या

find . -name '*.pdf' -ls 

जहां। आपकी वर्तमान कामकाजी निर्देशिका है। ग्लोब कार्यक्षमता 4.0+ बैश के साथ आता है। ग्लोब एक्सटेंशन दूसरे शब्दों में पोर्टेबल नहीं हैं।

5

विकल्प extglob और globstarglob लाइब्रेरी से विस्तारित कार्यक्षमता प्राप्त करने के लिए आवश्यक हैं; वे नीचे वर्णित शेल विकल्प (shopt) उपयोगिता का उपयोग कर चालू हैं।

globstar का उपयोग करने के लिए (जो ** पैटर्न को बैश मैनुअल में वर्णित व्यवहार के रूप में व्यवहार करने का कारण बनता है) किसी को इसे सक्रिय करना होगा (बैश 4 में।0+)

shopt -s globstar 

साथ और अधिक "कार्यात्मक" regex प्रकार ?(ab) और *(ab) उनके पूर्ण प्रभाव की तरह भाव सक्षम करने के लिए,

shopt -s extglob 

का उपयोग विकल्प फिर से बंद करने के लिए, -u ध्वज को निर्दिष्ट s, eaxample

shopt -u globstar 
संबंधित मुद्दे

 संबंधित मुद्दे