यह मुख्य रूप से लिनक्स कर्नेल के आपके संस्करण पर निर्भर करता है।
आपको चलाकर अपने सिस्टम की सीमा देखने में सक्षम होना चाहिए
getconf ARG_MAX
जो आपको बताता है कि शेल द्वारा विस्तारित किए जाने के बाद एक कमांड लाइन की अधिकतम संख्या बाइट्स हो सकती है।
लिनक्स <2.6.23 में, सीमा आमतौर पर 128 KB है।
लिनक्स में = = 2.6.25, सीमा या तो 128 KB है, या आपके स्टैक आकार (देखें ulimit -s
) का 1/4 , जो भी बड़ा है।
सभी विवरणों के लिए निष्पादित (2) मैन पेज देखें।
दुर्भाग्य से, पाइपिंग ls *.txt
समस्या को ठीक करने वाली नहीं है, क्योंकि सीमा ऑपरेटिंग सिस्टम में है, शेल नहीं।
शेल का विस्तार होता है *.txt
, फिर कॉल करने का प्रयास करता है
exec("ls", "a.txt", "b.txt", ...)
और आपके पास इतनी सारी फाइलें मेल खाती हैं *.txt
कि आप 128 KB की सीमा से अधिक हो जाते हैं।
आपको कुछ ऐसा करना होगा
find . -maxdepth 1 -name "*.txt" | wc -l
बजाय।
(और शॉल जे। गोफ की टिप्पणियों को उन नामों के बारे में नीचे देखिए जिनमें नए नाम हैं।)
ls
के आउटपुट के रूप में गिना जाता है , जो एक बुरा विचार है, इसलिए बेहतर है कि इससे बचें। गिनती के लिए देखें कि निर्देशिका में फ़ाइलों की संख्या गिनने का सबसे अच्छा तरीका क्या है? एक मुश्किल काम के लिए देखें कि लूप के लिए "तर्क बहुत लंबा" त्रुटि क्यों नहीं बढ़ जाती है? ।