कैसे सभी / देव / डिस्क को सूचीबद्ध करें, एस 1, एस 2, ... में समाप्त होने वाले विभाजन नहीं?


0

मैं कमांड लाइन पर बैश 3.2 खोल में सीरियल नंबर से इसके मैक ओएस एक्स नाम को ड्राइव करने (आउटपुट) की सूची बनाने की कोशिश कर रहा हूं। इसके लिए मुझे विभाजन नहीं होने के कारण सभी ब्लॉक उपकरणों के माध्यम से लूप करना होगा। इसलिए मुझे इस बैश लूप के लिए एक बेहतर प्रतिस्थापन की आवश्यकता है:for disk in /dev/disk*; do …; done

मैं ls केवल वाइल्डकार्ड पैटर्न के साथ, पाइपिंग ( grepबिना) और अन्य बर्तनों (जैसे find) के बिना , केवल उपयोग करना चाहता हूं ।

ऐसा लगता है कि है ls /dev/disk*, लेकिन विभाजन में समाप्त होने के मिलान नहीं s1(जैसे /dev/disk0s1), s2आदि।

वापसी

असफल प्रयास:

$ ls /dev/disk[0-9]*[!s][!1-9]
$ ls /dev/disk[0-9]*[!s,!1-9]
$ ls /dev/disk* -d -- *[!s][1-9]
$ ls /dev/disk[0-9]*[!s,1-9]
$ ls /dev/disk[0-9]*[!s]
$ ls /dev/disk[0-9]*[!s][0-9]
$ ls /dev/disk[0-9]*[!s]*
$ ls /dev/disk[0-9]*[!\s1-9]
$ ls /dev/disk[0-9]*[!s1-9]
$ ls /dev/disk[0-9]*([!s1-9])
$ ls /dev/disk[0-9]*[!s]*[0-9]
$ ls /dev/disk[0-9][0-9]
$ ls /dev/disk* --ignore="disk*s?"
$ ls /dev/disk* -I "*s?"
$ ls /dev/disk* -I "*s[1-9]"
$ ls /dev/disk*[!s?]

जवाबों:


1

kshविस्तारित ग्लोब का उपयोग करना :

ls /dev/+(disk?|disk??)

आपके लिए bashविस्तारित ग्लोब को चालू करना होगा

shopt -s extglob
ls /dev/+(disk?|disk??)

कृपया कोई एक्सटर्नल नहीं, विस्तारित ग्लोबिंग को भी चालू न करें। -bash: syntax error near unexpected token '('
प्रो बैकअप

@Pro बैकअप- याह, आपको वह त्रुटि मिलती है यदि आपने ग्लोब सेट नहीं बढ़ाया है। कृपया बताएं कि आप अपने शेल की विशेषताओं को सीमित क्यों करना चाहते हैं।
fd0

मैं खोल विकल्प बदलने की हिम्मत नहीं करता, संभवतः अन्य बैश / शेल स्क्रिप्ट के निष्पादन को तोड़ता हूं।
प्रो बैकअप

@Pro बैकअप- वैसे, सेटिंग extended globआपके बैश स्क्रिप्ट को "ब्रेक" नहीं करेगी, जैसे null globआपके उत्तर में सेटिंग कुछ भी "ब्रेक" नहीं करती है। शुभ लाभ।
fd0

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