उबंटू टर्मिनल के माध्यम से, एक ही नाम के साथ एक नए फ़ोल्डर में कई ज़िप फाइलें निकालें


36

मेरे पास कई ज़िप फाइलें हैं a.zip, b.zip, c.zip, ... और मैं उनमें से प्रत्येक को नए फ़ोल्डर a, b, c, ... क्रमशः टर्मिनल के माध्यम से निकालना चाहता हूं ।

दरअसल, मैं जो चाहता हूं वह एक समाधान है जिसे मैं बाद में उपयोग कर सकता हूं findक्योंकि मेरे पास वास्तव में कई फ़ोल्डर्स हैं 2014, 2013, 2012, ... उनमें से प्रत्येक में कई ज़िप फाइलें हैं a.zip, b.zip, आदि। find . -name "*.zip" -exec {} unzip \;यह सभी फाइलों को अनज़िप करके उनके संबंधित पैरेंट फ़ोल्डर में डाल देगा।


जवाबों:


71

आपको -dसंग्रह सामग्री के लिए वैकल्पिक निर्देशिका सेट करने के लिए अनज़िप के विकल्प का उपयोग करने में सक्षम होना चाहिए ।

unzip -d a a.zip
unzip -d b b.zip

और इसी तरह। एक findअभिव्यक्ति के भीतर , आप शेल पैरामीटर विस्तार का उपयोग करके ज़िप के नाम से निर्देशिका के लिए नाम प्राप्त करने में सक्षम होना चाहिए जैसे

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

यह पहली टेस्ट एक जोड़कर echoयानी

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

या ऐसा कुछ

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

2
test it first…भाग के लिए +1
mrzmyr

2
findएक निर्देशिका है, तो जरूरत हैfind . -name ...
SLF

@ शेल्फ POSIXly, हां - लेकिन GNU के मामले में नहीं find( "यदि कोई शुरुआती बिंदु निर्दिष्ट नहीं है, .तो मान लिया जाता है।" )
17

10

मैं खुद इस की तलाश में आया था, केवल यह महसूस करने के लिए कि मैंने इसे पहले से ही अन्य कमांडों के साथ किया था और इसे सिर्फ कुछ और के बारे में लागू किया जा सकता है, जिस तरह से मैं पहले से ही कर रहा था।

खोज विधि बिना किसी कारण के लिए अधिक जटिल है।

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

यह हाथ में सवाल का सबसे अच्छा जवाब नीचे हाथ है। पिछला एक हास्यास्पद है और इसके बाद वाला फ़ाइल संबंधित रूट फ़ोल्डर में सॉर्ट नहीं करता है।
TheMegolith

एक निर्देशिका बनाने के बारे में कैसे जाना होगा बिना.zip प्रत्यय? एक दोस्त के लिए पूछ रहे हैं।
दशहरा

उत्तर एक .zip प्रत्यय के साथ एक निर्देशिका नहीं बनाता है, जो ब्रेसिज़ के भीतर भाग का बहुत बिंदु है।
kencinder

6

बस उपयोग करें

unzip '*.zip' -d /home/user/folder/

11
जब तक मैं कुछ याद नहीं कर रहा हूं, यह सब कुछ / होम / उपयोगकर्ता / फ़ोल्डर में नहीं खोल देगा, कि / घर / उपयोगकर्ता / फ़ोल्डर / ए और / घर / उपयोगकर्ता / फ़ोल्डर / बी में
एम जस्टिन जस्टिन

1

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

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

पुनश्च: मैं इसे एक टिप्पणी के रूप में जोड़ना चाहता था लेकिन मेरे पास पर्याप्त प्रतिष्ठा अंक नहीं हैं!

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