बैश में, वाइल्डकार्ड विस्तारक क्रम में होने की गारंटी है?


53

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

तो मैं सोच रहा था कि मैं उपयोग कर सकता हूं:

split -b 10485760 Big.file BigFilePiece.

और उसके बाद:

cat BigFile | bigFileProcessor

मैं कर सकता था:

cat BigFilePiece.* | bigFileProcessor

इसकी जगह पर।

हालांकि, मुझे कहीं भी यह नहीं मिला कि गारंटीकृत है कि तारांकन (उर्फ वाइल्डकार्ड, उर्फ *) का विस्तार हमेशा वर्णमाला के क्रम में होगा ताकि .aaपहले आए .ab(जैसा कि टाइमस्टैम्प ऑर्डर या ऐसा कुछ होने का विरोध किया जाए)।

इसके अलावा, क्या मेरी योजना में कोई खामियां हैं? catफ़ाइल को एक साथ सम्मिलित करने की प्रदर्शन लागत कितनी बढ़िया है ?


4
सुनिश्चित करें कि आप गलत तरीका अपना रहे हैं। यदि व्यवस्थापक आपके पास रिपॉजिटरी में मौजूद फ़ाइलों के आकार के लिए एक सीमा रखता है, तो आपको उसके साथ बात करनी चाहिए। विस्तार की बात करें - मैंने हमेशा देखा है कि विस्तार अल्फ़ान्यूमेरिकल है।
1948 में मिर्सिया वुटकोविसी

1
sortयदि आपको किसी अतिरिक्त ऑर्डर के हेरफेर की आवश्यकता है तो आप हमेशा पाइप कर सकते हैं ।
वार्नर

2
कृपया ध्यान दें कि मर्क्यूरियल आपके पास मौजूद RAM की मात्रा द्वारा सीमित किसी भी आकार की फाइलों का प्रबंधन कर सकता है। यदि आप एक बड़ी फ़ाइल जोड़ते हैं तो आपको एक चेतावनी मिलती है, क्योंकि Mercurial मानती है कि यह फ़ाइल को मेमोरी में पकड़ सकती है। मर्ज के लिए, मर्क्यूरियल को मेमोरी में दो फाइलें रखने की आवश्यकता होती है। इसलिए कम मात्रा में रैम वाली मशीनों को फ़ाइल की जांच करने में परेशानी हो सकती है। मैंने अभी-अभी इसका परीक्षण किया है, और hg commitएक NMB फ़ाइल पर 3 * NMB के बारे में RAM की hg updateआवश्यकता है और MB के बारे में RAM की आवश्यकता है 2 * N। यह Linux पर Mercurial 1.5 के साथ है।
मार्टिन गिस्लर

जवाबों:


67

हां, ग्लोबिंग विस्तार वर्णमाला है।

बैश manपेज से:

पथनाम विस्तार

शब्द बंटवारे के बाद, जब तक -fविकल्प सेट किया गया है, बैश पात्रों के लिए प्रत्येक शब्द को स्कैन करता है *, ?और [। यदि इनमें से एक अक्षर दिखाई देता है, तो शब्द को एक पैटर्न के रूप में माना जाता है, और पैटर्न से मेल खाने वाले फ़ाइल नामों की वर्णानुक्रमिक रूप से क्रमबद्ध सूची के साथ प्रतिस्थापित किया जाता है।


@ डेनिस विलियमसन, अगर किसी उपयोगकर्ता के पास एक अलग भाषा सेट है, तो क्या यह विचार सही होगा?
ज़ॉडेचेस

5
@Zoredache: यह वास्तव में POSIX द्वारा निर्दिष्ट किया गया है: opengroup.org/onlinepubs/007908775/xsh/glob.html "LC_CLLATE श्रेणी की वर्तमान सेटिंग द्वारा परिभाषित रूप में पथनाम क्रमबद्ध हैं, XBD विनिर्देश देखें, LC_COLLATE [ opengroup.org / onlinepubs / 007908775 / xbd /… ”और इसीलिए आपको ls -l [[:lower:]]इसके बजाय चीजों को करना चाहिए ls -l [a-z]
डेनिस विलियमसन

ध्यान दें कि आदेश वर्णानुक्रमिक है इसलिए BigFilePhew.10 BigFilePhew.2 से पहले आएगा
केन

@ डेनिसविलियम्सन - वर्ग कोष्ठक के दो जोड़े क्यों? एक मेरे लिए बिल्कुल वैसा ही काम करने लगता है।
आर्टऑफवर्फ

2
@ArtOfWarfare: यह आज़माएँ mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]:। "Z" फ़ाइल को केवल दूसरे द्वारा सूचीबद्ध किया गया है, lsक्योंकि यह लोअर केस सिंगल-लेटर फाइलनाम के लिए पूछ रहा है। पहला ls- बाहरी वर्ग कोष्ठक के बिना - पात्रों की सूची से एकल-वर्ण फ़ाइल नामों के लिए पूछ रहा है: ":", "l", "o", "w", "e", और "r"। दोनों मामलों में सबसे बाहरी वर्ग कोष्ठक एक ब्रैकेट अभिव्यक्ति को चित्रित करते हैं जो वर्णों और वर्गों को सूचीबद्ध करता है। के मामले में [[:lower:]], आंतरिक वर्ग कोष्ठक, कॉलन और शब्द एक वर्ण वर्ग का नाम देते हैं। ...
डेनिस विलियम्सन

4

यह bashआपके लिए लिपियों में निर्भर हो सकता है इसलिए आप के लिए यह व्यवहार दस्तावेज है । यह बहुत लंबे समय तक अन्य बॉर्न संगत गोले का भी सच रहा है ... हालांकि केस तह या गैर-अल्फ़ान्यूमेरिक वर्णों के बारे में कोने के मामले हो सकते हैं।

(परिणामी सूची, bashलगभग "ASCII-betical" क्रम में होगी --- सिवाय इसके कि निचले और ऊपरी मामले के पत्रों को एक साथ टकराया जाएगा जैसे कि कोई मामला मतभेद नहीं थे लेकिन निचले मामले के साथ उनके ऊपरी मामले समकक्षों से पहले टकरा गए थे। -लेखक उसी क्रम में टकराएंगे जैसा कि वे ASCII में दिखाई देते हैं)।

जैसा कि अन्य ने बताया है कि यह आपकी भाषा से संबंधित पर्यावरण सेटिंग्स से परेशान हो सकता है: आम तौर पर और विशेष रूप से LC_COLLATE। कमांड चलाने के लिए सबसे सुरक्षित हो सकता है envजो पर्यावरण को साफ़ करने के लिए एक कमांड के तहत ग्लोब विस्तार आदेश पर निर्भर करता है (उपयोग -iया -uउपयुक्त) या sortमजबूत सीक्वेंसिंग सुनिश्चित करने के लिए परिणामों को पाइप करने के लिए।


4
ऐसा प्रतीत होता है कि सभी गैर-अल्फ़ान्यूमेरिक्स को छँटाई प्रक्रिया में अनदेखा किया जाता है। इसलिए "=", "_", "~" का उपयोग किसी फ़ाइल को सूची को शुरू या समाप्त करने के लिए मजबूर करने के लिए नहीं किया जा सकता है (क्रमशः) सूची में।
ओथियस

3

जबकि ग्लोब विस्तार को वर्णानुक्रम में क्रमबद्ध किया जाता है, वे शेल की लैंगेज सेटिंग का भी पालन करते हैं।

यदि आप इसे पोर्टेबल बनाने का इरादा रखते हैं, तो इसे अपनी स्क्रिप्ट में "C" पर सेट करना सुनिश्चित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.