शेल स्क्रिप्ट का उपयोग करके फ़ाइलें खोलना


0

सब, मेरे पास एक ऐप है जहां उपयोगकर्ता एक ज़िप्ड फ़ोल्डर उठाता है जो एक शेल स्क्रिप्ट खोल देता है और फिर प्रसंस्करण के लिए नाम बदल देता है। ज़िप किए गए फ़ोल्डर में हमेशा निम्नलिखित नामकरण सम्मेलन होगा: "rXXXXX_CityName.info.zip" । ज़िप फ़ाइल के अंदर वाले फ़ोल्डर को "CityName.info" नाम दिया गया है जब शेल स्क्रिप्ट ज़िप फ़ाइल को खोलती है , तो वह "rXXXXX__ityName.info" नामक फ़ोल्डर बनाने के लिए फ़ोल्डर के नाम पर "rXXXXX_" को जोड़ देगीअनज़िप करने से पहले, शेल स्क्रिप्ट यह जांच लेती है कि "rXXXXX_CityName.info" नामक फ़ोल्डर मौजूद है या नहीं और यदि ऐसा होता है तो उसे हटा देता है। यहाँ कोड है:

 THEZIPFILE="r12345_Boston.info.zip" 
 DIR="r12345_Boston.info"  
 if [ -d "$DIR" ]; then
    rm -rf "$DIR"
    sleep 1
 fi  

 if [ ! -d "$DIR" ]; then
    unzip -o "$THEZIPFILE" > /dev/null &
    zpid=$!
    wait $zpid
    EXIT_STATUS=$?
    if [ $EXIT_STATUS -eq 0 ]; then
        rm -rf  __MACOSX
        # Do Some processing....
    fi
    echo $EXIT_STATUS
    exit
else
    echo "-1"
    exit
fi

मैं जानना चाहता हूं कि क्या यह कोड गलतियों के लिए कोई जगह छोड़ता है? क्या मैं यह मानने में सही हूँ कि उपरोक्त कोड क्रमिक रूप से निष्पादित होगा (यानी अगले एक पर जाने से पहले प्रत्येक कमांड के पूरा होने की प्रतीक्षा करें)?

जवाबों:


2

ठीक लगता है, बस लगता है कि कुछ कोड अनावश्यक हैं? उदाहरण के लिए, आप rmसीधे कर सकते हैं और आप unzipबिना &रुके भाग सकते हैं ।

 THEZIPFILE="r12345_Boston.info.zip" 
 DIR="r12345_Boston.info"  
 rm -rf "$DIR"
 unzip -o "$THEZIPFILE" > /dev/null
 EXIT_STATUS=$?
 if [ $EXIT_STATUS -eq 0 ]; then
   rm -rf  __MACOSX
   # Do Some processing....
 fi
 exit $EXIT_STATUS

1

यह StackOverflow के लिए अधिक उपयुक्त हो सकता है।

उस ने कहा, आप शायद सही रास्ते पर हैं, लेकिन मैं ऐसा नहीं करूंगा।

आमतौर पर स्क्रिप्ट्स उप-प्रोग्राम के बाहर आने तक इंतजार करती हैं, जब तक कि उन्हें रोकने के लिए कुछ विशेष नहीं किया जाता है, विशेष रूप से, &आपके unzipकमांड के अंत में जोड़कर स्क्रिप्ट को बिना प्रतीक्षा किए जारी रखने के लिए कहता है। तब आपके पास कमांड का प्रोसेस आईडी पता करने और उसके खत्म होने तक इंतजार करने के लिए काफी कोड है।

मैं आपको बस इसे हटाने का सुझाव दूंगा:

  unzip -o "$THEZIPFILE" > /dev/null

आपके sleepबाद की कमांड rmभी अनावश्यक लगती है।


0

स्क्रिप्ट यह सत्यापित $THEZIPFILEकरने से पहले मौजूद नहीं है कि इसे अनज़िप करने का प्रयास नहीं किया गया है। इसके अलावा, अगर $DIRएक सादा फ़ाइल है और निर्देशिका नहीं है, तो इसे अनज़िप से पहले नहीं हटाया जाएगा जो बाद में त्रुटियां देगा।


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