क्या फ़ाइल नाम विस्तार (ग्लोबिंग) को बैश करने के लिए अधिकतम है और यदि हां, तो यह क्या है?


11

क्या फ़ाइल नाम विस्तार (ग्लोबिंग) को बैश करने के लिए अधिकतम है और यदि हां, तो यह क्या है? Tldp.org पर ग्लोबिंग देखें ।

मान लीजिए कि मैं फ़ाइलों के सबसेट के खिलाफ एक कमांड चलाना चाहता हूं:

grep -e bar foo*
rm -f bar*

क्या कितनी फ़ाइलों को बैश करने की सीमा है, और यदि ऐसा है तो क्या होगा?

मैं उन कार्यों को करने के लिए वैकल्पिक तरीकों की तलाश नहीं कर रहा हूं (जैसे कि उपयोग करके find)।



2
यह भी देखें: एक कमांड तर्क के लिए अधिकतम आकार क्या परिभाषित करता है? वर्तमान लिनक्स सिस्टम पर, एकल तर्क के आकार और कुल आकार के लिए अलग-अलग सीमाएँ हैं। उत्तरार्द्ध स्टैक आकार सीमा पर निर्भर करता है।
ilkachachu

जवाबों:


17

एक bashग्लोब द्वारा विस्तारित की जा सकने वाली फ़ाइलों की संख्या के लिए कोई सीमा (उपलब्ध स्मृति के अलावा) नहीं है ।

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

अधिक जानकारी के लिए, देखें:

उस सीमा के आसपास काम करने के लिए, आप (जीएनयू xargsया संगत मानकर ) उपयोग कर सकते हैं :

printf '%s\0' foo* | xargs -r0 rm -f

ऊपर, चूंकि printfबिल्ट-इन ( bashऔर अधिकांश बॉर्न-जैसे गोले हैं), हम execve()सीमा से नहीं टकराते। और सीमा से बचने के लिए xargsतर्कों की सूची को उतने ही rmआह्वान के रूप में विभाजित करेगा execve()

के साथ zsh:

autoload zargs
zargs foo* -- rm -f

के साथ ksh93:

command -x rm -f foo*

7

आप तर्कों के कुल आकार की सीमा देख सकते हैं:

getconf ARG_MAX

यह आमतौर पर शेल द्वारा नहीं, बल्कि इस उत्तर के अनुसार अंतर्निहित ऑपरेटिंग सिस्टम द्वारा निर्धारित किया जाता है ।


2
मुझे लगता है कि यह कुल लंबाई है, संख्या नहीं?
ilkachachu

1
आप निश्चित रूप से सही हैं; मैंने इसे दर्शाने के लिए अपना उत्तर अपडेट कर दिया है। इस वजह से, तर्कों की संख्या की सीमा तर्कों की लंबाई का एक कार्य होगी ।
डोपघोटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.