2012-06-25 8 views
16

मुझे निर्देशिका में बड़ी संख्या में फ़ाइलों को संसाधित करने की आवश्यकता है। फ़ाइल नामों के आधार पर फ़ाइलों को कई समूहों में विभाजित किया जा सकता है। ऐसा कहने के लिए, फ़ाइल नाम पैटर्न matchedne हो सकता है जो वे 'समूह' से संबंधित हैं। उदाहरण के लिए, नाम इस तरह हैं:निर्देशिका और पैटर्न मिलान फ़ाइल नामों में फ़ाइलों को पुन: सक्रिय करने के लिए बैश स्क्रिप्ट

  • YYYYMMDD _ * _ bulk_import.csv
  • YYYYMMDD _ * _ genstats_import.csv
  • YYYYMMDD_ * allstats.csv

आदि ...

प्रत्येक 'समूह' में एक अलग प्रसंस्करण पद्धति है (यानी एक अलग आदेश प्रसंस्करण के लिए कहा जाता है)।

मैं करने के लिए एक पार्टी स्क्रिप्ट लिखने के लिए करना चाहते हैं: निर्देशिका

  • तय करें कि कौन 'समूह' एक फ़ाइल पैटर्न ज्ञात पैटर्न के लिए इसका नाम का मिलान करके के अंतर्गत आता है में सभी CSV फ़ाइलों के माध्यम से

    1. दोहराएं (जैसे उदाहरण मैंने ऊपर दिया)
    2. निर्धारित समूह के आधार पर कमांड को कॉल करें।

    मैं उबंटू 10.0.4 पर चल रहा हूं। मैं बैश करने के लिए नया हूं, और कंकाल कोड स्निपेट की सराहना करता हूं जो मुझे इस स्क्रिप्ट को लिखने में मदद करेगा।

  • उत्तर

    34

    संभवतः प्रत्येक समूह को अलग-अलग करने के लिए सबसे आसान तरीका है। यह पक्षियों को पूरी तरह से पार्सिंग मुद्दा।

    DIRECTORY=. 
    
    for i in $DIRECTORY/YYYYMMDD_*_bulk_import.csv; do 
        # Process $i 
    done 
    
    for i in $DIRECTORY/YYYYMMDD_*_genstats_import.csv; do 
        # Process $i 
    done 
    
    for i in $DIRECTORY/YYYYMMDD_*allstats.csv; do 
        # Process $i 
    done 
    

    DIRECTORY जो भी निर्देशिका आप खोजना चाहते हैं उसे सेट करें। डिफ़ॉल्ट . वर्तमान कार्य निर्देशिका को खोजेगा।

    +0

    अच्छा और सरल। मेरा वोट प्राप्त करता है! –

    +0

    क्या लूप में '*' का "मान" प्राप्त करने का एक आसान तरीका होगा? – luckydonald

    6

    फाइल प्रकार निर्धारित करने के लिए स्विच ब्लॉक के साथ फाइलों पर मूल पुनरावृत्ति है।

    #!/bin/bash 
    for f in *; do 
         case $f in 
           [0-9]*_bulk_import.csv) 
             echo $f case 1 
             ;; 
           [0-9]*_genstats_import.csv) 
             echo $f case 2 
             ;; 
           [0-9]*allstats.csv) 
             echo $f case 3 
             ;; 
         esac 
    done 
    
    संबंधित मुद्दे

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