2011-06-02 5 views
11

मेरे पास ज़िप फ़ाइलों से भरा निर्देशिका है। प्रत्येक को 'files1.zip' जैसे कुछ कहा जाता है। मेरी प्रवीणता प्रत्येक फ़ाइल को अनजिप करने के लिए लूप के लिए एक बैश का उपयोग करना है।मैं प्रत्येक फ़ाइल को किसी निर्देशिका में अनजिप करने के लिए एक एकल कमांड का उपयोग कैसे कर सकता हूं, उसी नाम के साथ एक नई अनन्य निर्देशिका में फ़ाइल

समस्या यह है कि, कई फाइलें अपनी सामग्री को सीधे मूल निर्देशिका में अनजिप कर देती हैं, बल्कि सब कुछ अपनी अनूठी निर्देशिका में प्रकट करती हैं। तो, मुझे फ़ाइल सूप मिलता है।

मैं यह सुनिश्चित करना चाहता हूं कि 'files1.zip' अपनी सभी फाइलों को 'फाइल 1' नामक एक डीआईआर में डालें, और इसी तरह।

एक अतिरिक्त जटिलता के रूप में, कुछ फ़ाइल नामों में रिक्त स्थान हैं।

मैं यह कैसे कर सकता हूं?

धन्यवाद।

+0

संबंधित: [http://stackoverflow.com/q/2463874/435605](http://stackoverflow.com/q/2463874/435605) –

उत्तर

14
for f in *.zip; do 
    dir=${f%.zip} 

    unzip -d "./$dir" "./$f" 
done 
0

आप एक अलग निर्देशिका में अनजिप करने के लिए -d का उपयोग कर सकते हैं।

for file in `echo *.zip`; do 
    [[ $file =~ ^(.*)\.zip$ ]] 
    unzip -d ${BASH_REMATCH[1]} $file 
done 
+0

'echo * .zip' ज़िप फ़ाइल नामों के लिए काम नहीं करेगा जिसमें रिक्त स्थान हैं। – Neil

+4

क्यों न केवल * .zip में फ़ाइल के लिए; कर ...; done'? –

1

सरल एक लाइनर

$ for file in `ls *.zip`; do unzip $file -d `echo $file | cut -d . -f 1`; done 
संबंधित मुद्दे

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