2012-09-07 12 views
10

मैं एक खोल स्क्रिप्ट मूल रूप से यह करता है कि जरूरत के बाद के लिए: सभी txt फ़ाइलों के लिए एक फ़ोल्डर मेंस्क्रिप्ट व्यक्ति ज़िप फ़ाइलें बनाने के लिए प्रत्येक फाइल .txt यह पाता है और उन्हें स्थानांतरित

  • खोजों, और हर एक के लिए यह पाता है, एक व्यक्तिगत ज़िप फ़ाइल बनाता है जो कि txt फ़ाइल के समान होता है + .zip।
  • उसके बाद बनाई गई ज़िप फ़ाइल txt फ़ाइल में ले जाती है।

मूल रूप से इसकी ज़िप के बराबर लेकिन समान नाम रखने के लिए txt फ़ाइलों की एक सूची को प्रतिस्थापित करने के लिए एक स्क्रिप्ट है।

find . -name '.txt.' -print 

परिणाम हैं::

मैं फ़ाइलों है कि मैं जिप करना चाहते ढूंढने के लिए ढूंढें का इस्तेमाल किया है गया है

./InstructionManager.txt.0 
./InstructionManager.txt.1 

उन फ़ाइलों मैं निश्चित रूप से व्यक्तिगत रूप से ज़िप करने (चाहते हैं वे बहुत अधिक होंगे), लेकिन यह नहीं जानते कि उन्हें आम तौर पर कमाने के लिए तर्कों का उपयोग कैसे करें:

zip ./InstructionManager.txt.0.zip ./InstructionManager.txt.0 
mv ./InstructionManager.txt.0.zip ./InstructionManager.txt.0 
zip ./InstructionManager.txt.1.zip ./InstructionManager.txt.1 
mv ./InstructionManager.txt.1.zip ./InstructionManager.txt.1 

कोई विचार? और नहीं, मैं सभी फाइलों के साथ एक ज़िप नहीं चाहते: एस धन्यवाद

+0

यह एक सिंगल है 'ढूंढ' के साथ एर। आपने क्या प्रयास किया –

+0

खोजें। -नाम '* .txt। *' -प्रिंट – catteneo

+0

कुछ और जानकारी के साथ पोस्ट संपादित किया गया। – catteneo

उत्तर

14
find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec mv '{}'.zip '{}' \; 
  • .txt फ़ाइलों
  • पहले -exec ज़िप खोजें फाइल
  • दूसरा -exec ज़िप्ड फ़ाइलों को मूल नाम
  • पर पुनर्नामित करता है

ध्यान दें कि यह प्रक्रिया मूल फ़ाइलों को ओवरराइट करती है। सुनिश्चित करें कि नई फ़ाइलें वास्तविक ज़िप फ़ाइलें हैं होने के लिए, आप कर सकते हैं:

file InstructionManager.txt.* 

कौन वापस करेगा:

InstructionManager.txt.0: Zip archive data, at least v1.0 to extract 
InstructionManager.txt.1: Zip archive data, at least v1.0 to extract 
+0

वह आकर्षण की तरह काम किया! : डी लेकिन अब कुछ और वृद्धि की जरूरत है। उदाहरण के लिए, जैसे ही फाइलें एक जैसी होती हैं, अगर स्क्रिप्ट एक बार और अधिक चलाती है, तो उसने ज़िप के अंदर एक ज़िप के अंदर एक ज़िप बनाया ..... क्या उस फ़ाइल के आउटपुट का उपयोग करना संभव है InstructionManager.txt। * कमांड केवल स्क्रिप्ट चलाएं यदि यह वास्तविक txt फ़ाइल है?लेकिन पहले के लिए धन्यवाद: डी – catteneo

+0

ओह, और दूसरा * अगर * इस डिलीट की तरह, सीडी/एमएनटी/यूएसबी-स्टोरेज/लॉग/&& ls -t1/mnt/usb-storage/logs/| पूंछ-एन +5 | xargs rm -r प्रत्येक फ़ाइल ज़िप, यह वास्तविक txt फ़ाइल है, और यह अंतिम 5 संशोधित फ़ाइलों में से एक नहीं है? – catteneo

5

खोजें और ज़िप का उपयोग करना:

find . -name '*.txt.*' -exec zip '{}.zip' '{}' \; 
1
find और xargs, फ़ाइल नाम के साथ

स्वीकार किए जाते हैं रिक्तियों के साथ:

find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}' 

फ़ाइलों को ज़िपित किया गया है, फिर उनका नाम बदलकर उनके मूल नाम

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