2011-09-22 12 views
6

क्या इनवर्क्स बैश v4 खोल विस्तार, यानी हैंडलिंग का एक तरीका है। वाइल्डकार्ड की तरह सभी फाइलों का इलाज करें? मैं rm को सभी फ़ाइलों कि इस मामले में प्रारूप 'Folder-???' के नहीं हैं की जरूरत है और अगर कोई है सोच रहा था एक छोटा (यानी। में निर्मित) जिस तरह से फिर एकबैश: उलटा (यानी नहीं) खोल वाइल्डकार्ड विस्तार?

for file in * 
do 
    [[ $i =~ \Folder-...\ ]] && rm '$i' 
done 

पाश कर। (उदाहरण के काम नहीं करता है, Btw ...)

बस बैश सीखने जिज्ञासा से बाहर

...

+0

मुझे डर है कि आप ऐसा नहीं कर सकते कर रहा हूँ और है इसके बजाय नियमित अभिव्यक्तियों का उपयोग करने के लिए। – TMS

+0

संभावित डुप्लिकेट [जब मैं यूनिक्स/लिनक्स खोल में पैटर्न मिलान करता हूं तो मैं उलटा या नकारात्मक वाइल्डकार्ड का उपयोग कैसे कर सकता हूं?] (Http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -विल्डकार्ड-जब-पैटर्न-मिलान-इन-ए-यूनिक्स-लिनु) – Johan

+1

@ टॉमस असत्य; extglobs उलटा कर रहे हैं। –

उत्तर

14
shopt -s extglob 
rm -- !(Folder-???) 
+0

+1: उसे नहीं पता था। –

3

@Dimitre बैश के लिए right answer है।

for file in *; do 
    case "$file" in 
    Folder-???) : ;; 
    *) do stuff here ;; 
    esac 
done 

एक और बैश समाधान के अंदर [[ ... ]] (documentation)

for file in *; do 
    if [[ "$file" != Folder-??? ]]; then 
    do stuff here 
    fi 
done 
+0

हाय @glenn, बस दोनों मामलों में इसे जोड़ने के लिए: 'केस वर्नाम ...' और _varname_ के अंदर '[[...]]' कोई खोल शब्द/फ़ील्ड स्प्लिटिंग नहीं किया जाता है, इसलिए पहचानकर्ता को होने की आवश्यकता नहीं है उद्धृत (और इस संदर्भ में उद्धरण, निश्चित रूप से, हानिकारक नहीं है)। –

2

पैटर्न मिलान ऑपरेटर का उपयोग करने के मामले आप find लिए ठीक है में, आप find को उलटने के कर सकते हैं 'है: एक पोर्टेबल समाधान का उपयोग करने case है -not के साथ भविष्यवाणी करता है।

find -not -name 'Folder-???' -delete 

में के रूप में (इस ग्लोब मिलान शेल को अन्य अंतरों के अलावा रिकर्सिवली से मेल खाता है ध्यान दें, लेकिन मैं आपको find काफी अच्छी तरह से पता है कि मान)

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