2013-06-29 10 views
12

ग्लोबिंग के लिए भी कई मैं निम्नलिखित चलाना चाहते हैं:सूची फ़ाइलें पैटर्न मिलान जब बैश

ls /path/to/files/pattern* 

और

/path/to/files/pattern1 
/path/to/files/pattern2 
/path/to/files/pattern3 

हालांकि, उस में पैटर्न मिलान बहुत सारी फ़ाइलें देखते हैं मिलता है निर्देशिका, और मुझे

bash: /bin/ls: Argument list too long 

ऐसा करने का बेहतर तरीका क्या है? शायद खोज कमांड का उपयोग कर? मुझे फ़ाइलों के लिए पूर्ण पथ मुद्रित करने की आवश्यकता है।

+1

क्या आपने 'find/path/to/files -name 'pattern *'' 'कोशिश की है? –

+0

संभावित डुप्लिकेट [तर्क सूची आरएम, सीपी, एमवी कमांड के लिए बहुत लंबी त्रुटि] (http://stackoverflow.com/questions/11289551/argument-list-too-long-error-for-rm-cp-mv-commands) –

उत्तर

22

यह xargs के साथ संयोजन में मदद करेगा। टिप्पणियों से

find /path/to/files -name "pattern*" -print0 | xargs -0 ls 

नोट:xargs मदद करेगा अगर आप सूची से कोई लेना देना एक बार आप इसे find से प्राप्त किया है चाहता हूँ। यदि आप केवल फाइलों को सूचीबद्ध करना चाहते हैं, तो find पर्याप्त होना चाहिए। हालांकि, अगर आप copy, delete या सूची में कोई भी कार्रवाई करना चाहते हैं, तो -exec के बजाय xargs का उपयोग करने में सहायता मिलेगी।

+0

दरअसल, ढूंढें/पथ/से/फाइल-नाम "पैटर्न *" वास्तव में ऐसा लगता है जो मैं चाहता हूं - इसका कोई कारण नहीं है? धन्यवाद! – DavidR

+0

ठीक है अगर आप एक सूची प्राप्त करने के बाद कुछ करना चाहते हैं। उदाहरण के लिए उन्हें कहीं और कॉपी करें, या उन्हें हटा दें। ऐसे मामलों में 'xargs' मदद करेगा। अगर आप उन्हें सूचीबद्ध करना चाहते हैं, तो हाँ, आपको इसके लिए 'xargs' की आवश्यकता नहीं है। –

+0

ग्रेट - मैं वास्तव में जीएनयू समांतर में पाइप करने के लिए इस कमांड का उपयोग कर रहा हूं, जिसका उपयोग मैं xargs के बजाय करता हूं। [उस मामले में -प्रिंट 0 की कोई ज़रूरत नहीं है।] – DavidR

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