फ़ाइलों का एक बैच खोलना


33

जब मैं कोशिश करता हूं

 unzip filename.zip

यह काम करता हैं। हालाँकि, मुझे ज़िप फ़ाइलों की एक श्रृंखला को अनज़िप करने की आवश्यकता है।

क्यों हैं:

 find . -name "*.zip" -print0 | xargs -0 unzip

या

 ls *.zip | xargs unzip

काम नहीं कर रहा?

दोनों ही मामलों में मुझे "सावधानी: फ़ाइल नाम मिलान नहीं:" संदेश मिलता है।

जवाबों:


48

आप आदेश जारी कर सकते हैं:

$ unzip '*.zip'

संदर्भ के लिए यहां देखें ।


मैंने इसे स्पष्ट रूप से नहीं कहा, लेकिन वे सभी एक ही निर्देशिका में नहीं हैं। इसलिए, मुझे खोज के आउटपुट की आवश्यकता है।
jeannoburto

4
धन्यवाद। यह पूरी तरह से वास्तविक प्रश्न से मेल खा सकता है लेकिन इससे मेरी समस्या हल हो गई। मैं कोशिश कर रहा था unzip *और यह caution: filename not matchedहर फाइल के लिए लौट आया लेकिन unzip '*.zip'काम किया।
इवान

27

आपके आदेश काम नहीं कर रहे हैं क्योंकि वे एक ही कमांड लाइन पर सभी फाइलों को भरते हैं। जबकि वह अधिकांश कार्यक्रमों के साथ काम करता है, unzipपहला तर्क ज़िप फ़ाइल के रूप में लेगा, और किसी भी पहली के बाद फ़ाइलों से इसे निकालने के लिए। आपको प्रत्येक फ़ाइल के लिए एक बार कमांड निष्पादित करने की आवश्यकता है:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

या

find . -name '*.zip' -exec unzip {} \;

दूसरे मामले में बेहतर प्रतीत होता है कि वास्तव में बहुत सारी फाइलें हैं। (अन्यथा यह शिकायत थी कि कमांड xargs के साथ बहुत लंबा है)
Recct

5

बैश में आप निम्न कार्य भी कर सकते हैं:

for i in *.zip; do
    unzip "$i"
done

भी unzip-dस्विच ले सकते हैं ताकि आप आउटपुट को विभिन्न स्थानों पर लक्षित कर सकें।

उदाहरण के लिए:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

ऊपर दिए गए लूपिंग की तुलना में बहुत आसान समाधान है, निर्देशिका -dध्वज का उपयोग करें :

unzip -o somefiles.zip -d $directoryPath

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