2011-04-08 23 views
8

से जगह में अनज़िप फ़ाइलों छोड़ने मैं अब तक समझ गए होंगे कि कैसे रिकर्सिवली सभी फाइलों को अनज़िप करने के लिए लगता है का उपयोग करें:रिकर्सिवली फ़ाइलों अनज़िप और फिर मूल फ़ाइल को हटाने, खोल

find . -depth -name `*.zip` -exec /usr/bin/unzip -n {} \; 

लेकिन, मैं नहीं कर सकता निष्कर्षण के बाद एक समय में ज़िप फ़ाइलों को हटाने का तरीका जानें। एक -a -exec में आरएम * .zip जोड़ना निकालने से पहले प्रत्येक निर्देशिका में अधिकांश ज़िप फ़ाइलों को हटा देता है। आरएम कमांड युक्त एक स्क्रिप्ट के माध्यम से पिपिंग (परीक्षण के लिए सक्षम -i) किसी भी * .zips (या कम से कम यही शिकायत नहीं करता) ढूंढने का कारण बनता है। निश्चित रूप से, कई फ़ाइल नामों में सफेद जगह है, लेकिन इस बिंदु पर _ जोड़ने के लिए एक sed कमांड में वाक्यविन्यास मेरे बाहर थोड़ा सा है। मदद के लिए शुक्रिया!

+0

आपका मतलब क्या है 'रिकर्सिवली', ज़िप में ज़िप? जटिल कार्यों के लिए, व्यक्तिगत रूप से मैं एक सहायक स्क्रिप्ट लिखूंगा (कहें 'unzip-and-rm.sh') और -exec उस स्क्रिप्ट। –

+0

अगर मैं पर्याप्त स्पष्ट नहीं था तो मैं क्षमा चाहता हूं। निर्देशिका पेड़ गहरे स्तर पर ज़िप फ़ाइलों के साथ कम से कम छह या सात स्तर नीचे चला जाता है। प्रत्येक ज़िप फ़ाइल में दो अन्य फाइलें होती हैं, और मैं अन्य फ़ाइलों को छूटे रखना चाहता हूं लेकिन फिर ज़िप फ़ाइल को हटा देना चाहता हूं। मेरा मूल प्रयास यहां 'unzip-and-rm' को एक स्क्रिप्ट में प्लग करने के लिए था - और इसे ठीक करें, लेकिन यह किसी भी ज़िप फ़ाइलों को खोजने में विफल रहता है, और मुझे संदेह है कि यह फ़ाइल नामों में रिक्त स्थान के कारण है। – Ben

+0

मुझे नहीं पता कि यह किसी भी ज़िप फ़ाइलों को खोजने में विफल क्यों है, मैं विश्वास नहीं कर सकता, क्या आप कमांड लाइन पेस्ट कर सकते हैं? –

उत्तर

9

आप की कोशिश की है:

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -exec rm {} \; 

या

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -delete 

या -delete साथ 2 आदेश के लिए एक

find . -depth -name '*.zip' -exec rm {} \; 
+0

मुझे एक 'ढूंढें: पथ अभिव्यक्ति से पहले होना चाहिए:/usr/bin/unzip'। – Ben

+0

कृपया अन्य विकल्पों को आजमाएं – ggiroux

+0

आह! दूसरा विकल्प पूरी तरह से काम करता है। '-delete', मैं तुम्हें कैसे कभी नहीं जानता था! मुख्य मानदंडों में से एक यह है कि मैं उल्लेख करना भूल गया था कि अनजिपिंग और हटाना वापस वापस आना चाहिए, क्योंकि ड्राइव सब कुछ अनजिप करने के लिए पर्याप्त नहीं है और फिर हटाने के लिए वापस जाएं। आपको बहुत - बहुत धन्यवाद! – Ben

7

THX unzip के बाद एक दूसरा खोज चल रहा है! मुझे एक बहुत मदद की .. सिर्फ 2 (शायद उपयोगी) मेरी तरफ से टिप्पणी:

-had मेरी डेबियन सिस्टम पर ` .zip` के बजाय'ज़िप' का उपयोग करने

-execdir-exec> यह प्रत्येक ज़िप फ़ाइल को अपने वर्तमान फ़ोल्डर में निकाल देगा, अन्यथा आप डीआईआर में सभी निकाली गई सामग्री के साथ समाप्त हो जाएंगे जिसे आपने खोज cmd को बुलाया था।

ढूंढें। -depth -name '* .zip' -execdir/usr/bin/unzip -n {} \; -delete

THX & सादर, नॉर्ड

2

ऊपर उल्लेख किया है, यह काम करना चाहिए।

ढूंढें। -depth -name '* .zip' -execdir unzip -n {} \; -delete

हालांकि, दो चीजों पर ध्यान दें:

  • -n विकल्प unzip मौजूदा फ़ाइलों को अधिलेखित नहीं करने के लिए निर्देश देता है। आपको पता नहीं हो सकता कि ज़िप फ़ाइलों को समान नामित लक्ष्य फ़ाइलों से अलग किया गया है या नहीं। फिर भी, -delete ज़िप फ़ाइल को हटा देगा।
  • अगर अनजिप फ़ाइल को अनजिप नहीं कर सकता है - त्रुटि के कारण कहें - यह अभी भी इसे हटा सकता है। अगर -exec आरएम {} \; कमांड निश्चित रूप से इसे हटा देगा।-delete के स्थान पर उपयोग किया जाता है।

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

0

subdir में खोल दो अभिलेखागार फ़ाइल नाम के आधार पर (../file.zip -> ../file/ ..):

for F in $(find . -depth -name *.zip); do unzip "$F" -d "${F%.*}/" && rm "$F"; done 
0

मैं एक निर्देशिका ज़िपित csv फ़ाइलें के साथ भरने की है। बाहरी प्रक्रियाएं अक्सर नई ज़िप्ड फाइलें लिख रही हैं। मैं अनजिप करना चाहता हूं और मूल के रूप में मूल को हटाना चाहता हूं।

है कि मैं का उपयोग करने के लिए:

unzip '*.zip' 
    find . | sed 's/$/\.zip/g' | xargs -n 1 rm 

यह खोज और निर्देशिका में इस समय सभी ज़िप फ़ाइलें विस्तार करके काम करता है। बाद में, इसे समाप्त होने के बाद वहां संभावित रूप से नई अनजिप नई फाइलें भी मिश्रित होती हैं जिन्हें अभी तक हटाया नहीं जाना है।

तो मैं सफलतापूर्वक अनजिप * .csv फ़ाइलों को ढूंढकर हटा देता हूं, और मूल फ़ाइल नामों को हटाने के लिए sed का उपयोग करके जिसे xargs कमांड के माध्यम से आरएम को खिलाया जाता है।

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