एक निर्देशिका में सभी फाइलें खोलना


203

मेरे पास ज़िप फ़ाइलों की एक निर्देशिका है (विंडोज मशीन पर बनाई गई है)। मैं मैन्युअल रूप से उनका उपयोग करके अनज़िप कर unzip filenameसकता हूं, लेकिन मैं शेल के माध्यम से वर्तमान फ़ोल्डर में सभी ज़िप फ़ाइलों को कैसे अनज़िप कर सकता हूं?

उबंटू लिनक्स सर्वर का उपयोग करना।

जवाबों:


395

इस कड़ी के अनुसार, यह काम करता है :

unzip \ *। ज़िप


2
मुझे Zsh के साथ बैकस्लैश की जरूरत थी । यदि आप बैश का उपयोग कर रहे हैं तो मुझे एक कारण की आवश्यकता नहीं है।
डॉन मैककरी

डुप्लिकेट फ़ाइलों के साथ क्या होगा? मुझे लगता है कि यह सिर्फ ओवरराइड करेगा?
kerner1000

MacOS पर बहुत बढ़िया काम करता है hi
Ahi Tuna

1
ऐसा करने पर मुझे निर्देशिका में सभी जिप फ़ाइलों के लिए फ़ाइल नाम नहीं मिला
thebeancounter

1
उद्धरण के साथ संस्करण ने मेरे लिए WSL पर काम किया। फ़ाइलनामों में भी उनके स्थान थे, FWIW।
मैक्स कैंडोसिया

107

वाइल्डकार्ड से बचने के लिए बस कुछ कोट्स में डालें:

unzip "*.zip"

2
+1 यह मेरे लिए काम करता है। मुझे बाकी को प्रतिबंधित करते हुए एक विशेष प्रारूप के साथ फाइलनाम को अनज़िप करना पड़ा। मैंने सिर्फ दोहरे उद्धरण चिह्नों के भीतर मिलान प्रारूप को रखा और यह आकर्षण की तरह काम किया। आउटपुट मुझे सफलतापूर्वक संसाधित किए गए अभिलेखागार की संख्या बताता है।
ललित कुमार B

विंडोज सबसिस्टम के लिए उबंटू पर खूबसूरती से काम किया, 11/18/2018। शीर्ष उत्तर से काम नहीं चला।
julianstanley

64

निम्न बैश स्क्रिप्ट वर्तमान निर्देशिका में सभी ज़िप फ़ाइलों को ज़िप फ़ाइल के फ़ाइल नाम के साथ नए dirs में निकालती है, अर्थात:

निम्नलिखित फाइलें:

myfile1.zip
myfile2.zip 

के लिए निकाला जाएगा:

./myfile1/files...
./myfile2/files...

शैल स्क्रिप्ट:

#!/bin/sh
for zip in *.zip
do
  dirname=`echo $zip | sed 's/\.zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$zip"
      cd ..
      # rm -f $zip # Uncomment to delete the original zip file
    else
      echo "Could not unpack $zip - cd failed"
    fi
  else
    echo "Could not unpack $zip - mkdir failed"
  fi
done

4
यह सभी चीजों पर विजय पाने की चीज है। विश्वास नहीं कर सकता कि यह उच्च मतदान नहीं है
22

यह फ़ाइल नाम में रिक्त स्थान के साथ सौदा नहीं करता है।
डेविड ऑलिवर

1
बस "फ़ाइलनाम में उद्धरण जोड़ें
CONvid19

1
`मेरा दिन बचाया! धन्यवाद! मैं कुछ लूप कर रहा हूं, अनजिप कर रहा हूं, एक एक्शन कर रहा हूं, कॉपी कर रहा हूं, कुछ हटा दूंगा, हटा दूंगा। याद आ रही थी कि कैसे bash स्क्रिप्ट में चर के रूप में फाइल करने के लिए file.gz से जाना है
thahgr

38

unzip * .zip, या यदि वे सबफ़ोल्डर में हैं, तो कुछ ऐसा है

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

unzip वाइल्डकार्ड प्रसंस्करण करता है इसलिए "* .zip" नामक एक फाइल वह नहीं करेगा जो आप उम्मीद करते हैं।
जियोकार

3
वास्तव में यह वही होगा जो अपेक्षित है, खोज ऑपरेशन के परिणाम को अनज़िप करने के लिए पारित किया जा रहा है
जॉन बार्गमैन

1
यह वर्तमान निर्देशिका में सभी ज़िप फाइलें निकालेगा, क्या होगा यदि मैं चाहता हूं कि संबंधित सबफ़ोल्डर्स में ज़िप फाइलें (सबफ़ोल्डर्स में मौजूद) निकाली जाए?
ऋषभ अग्रहरी

2
@ ऋषभअगरारी मैंने आपकी टिप्पणी को एक नए उत्तर में संबोधित किया ।
जोजो

के लिए gzip'edफ़ाइलें, का उपयोग gunzip -rfk .संबंधित फ़ोल्डरों के अंदर पुनरावर्ती अनज़िप करने के लिए
Devaroop

17

सभी .zipफ़ाइलों को अनज़िप करें और नए फ़ोल्डर में सामग्री को उसी नाम से और .zipफ़ाइल के समान फ़ोल्डर में संग्रहीत करें :

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

यह @ चरणमानस के उत्तर का विस्तार है और @ ऋषभअग्रह की टिप्पणी को संबोधित करता है :

यह वर्तमान निर्देशिका में सभी ज़िप फ़ाइलों को निकालेगा, क्या होगा यदि मैं चाहता हूँ कि संबंधित सबफ़ोल्डरों में ज़िप फाइलें (सबफ़ोल्डर में मौजूद) निकाली जाए?


1
के लिए gzip'edफ़ाइलें, का उपयोग gunzip -rfk .संबंधित फ़ोल्डरों के अंदर पुनरावर्ती अनज़िप करने के लिए
Devaroop

2
UnZip 6.00find: illegal option -- n का उपयोग करना - किसी और को?
डैनीडैनी डैनी

find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;आप निर्देशिका सूची को भूल गए।
SaundersB

16
for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

यह ज़िप अभिलेखागार के फ़ाइल नाम के साथ नए फ़ोल्डर में सभी ज़िप अभिलेखागार को खोल देगा।

a.zip b.zip c.zipa b cक्रमशः फ़ोल्डरों में अनज़िप किया जाएगा ।


6

aunpack -e *.zip, atoolस्थापित के साथ । लाभ यह है कि यह बुद्धिमानी से त्रुटियों से निपटता है, और हमेशा उपनिर्देशिकाओं में अनपेक्स करता है जब तक कि ज़िप में केवल एक फ़ाइल न हो। इस प्रकार, फ़ाइलों के द्रव्यमान के साथ वर्तमान निर्देशिका को प्रदूषित करने का कोई खतरा नहीं है, क्योंकि unzipज़िप पर कोई निर्देशिका संरचना नहीं है।


6

किसी भी POSIX शेल में, यह प्रत्येक ज़िप फ़ाइल के लिए एक अलग निर्देशिका में अनज़िप करेगा:

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done

1
या एक लाइनर के रूप में:for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
पेट्रिग्नन



1

अगर फाइलें हैं gzip'd। तो बस का उपयोग करें:

gunzip -rfk .

मूल निर्देशिका को मूल निर्देशिकाओं में रख कर फ़ाइलों को पुन: निकालने के लिए (या -kउन्हें हटाने के लिए निकालें )


0

यह पेड्रो लोबिटो उत्तर का एक प्रकार है जिसमें कुछ एक्सटेंशन शिक्षाओं के साथ फ़ाइलों को हटाने के लिए एक निर्देशिका के माध्यम से लूप का उपयोग कैसे किया जाता है :

shopt -s globstar
root_directory="."

for zip_file_name in **/*.{zip,sublime\-package}; do
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'`
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n"

    if [ -f "$root_directory/$zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$zip_file_name"
        # rm -f "$root_directory/$zip_file_name"
    fi
done

-2
for i in `ls *.zip`; do unzip $i; done

14
एलएस का खतरनाक उपयोग। क्या होगा अगर आपके पास "-j -o -d .. jackass.zip" नामक फाइल है
geocar


-3

उपयोग

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

किसी फ़ोल्डर को लिनक्स में अनज़िप करने के लिए


यह केवल सिंगल फाइल को अनज़िप करेगा। प्रश्न सभी फ़ोल्डरों को अनज़िप करने के लिए है
विवेक पांडे

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