2013-04-10 9 views
12

मेरे पास निर्देशिकाओं का एक समूह है जिसे पुनर्स्थापित करने की आवश्यकता है, लेकिन उन्हें पहले .tar में पैक किया जाना है। क्या कोई ऐसी स्क्रिप्ट है जो मुझे सभी 100+ निर्देशिकाओं को अपने स्वयं के टैर में पैकेज करने की अनुमति देगी, इसलिए dir dir.tar बन जाता है।प्रत्येक डीआईआर के लिए एक टैर फ़ाइल

अब तक प्रयास:

for i in *; do tar czf $i.tar $i; done 
+2

यदि उन्हें स्पष्ट रूप से सूचीबद्ध करने का एक तरीका है ... हाँ। – tink

+0

वे अपने ही डीआईआर में अकेले हैं अगर इससे इसे संभव बनाने में मदद मिलती है। –

+2

शायद आपको यह बताने के लिए क्या टिंक है कि SO "मेरे लिए मेरी स्क्रिप्ट लिखना" साइट नहीं है। अब तक तुमने क्या प्रयास किये हैं? –

उत्तर

31

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

find . -type d -maxdepth 1 -mindepth 1 

और यह एक:

आप निर्देशिका सूची नहीं रिकर्सिवली इस आदेश का उपयोग कर सकते

find . -type d -maxdepth 1 -mindepth 1 -exec tar cvf {}.tar {} \; 
+3

संग्रहीत किए जाने के बाद मूल निर्देशिका को निकालने के लिए '' जोड़ें। 'ढूंढें। -मैक्सडेपथ 1 -मिन्डेथ 1-प्रकार डी-एक्सेक टैर सीवीएफ {} .tar {} --remove-files \; ' –

+6

संपीड़ित 'ढूंढें। -प्रकार डी -मैक्सडेप 1 -मिन्डेथ 1 -exec tar zcvf {} .tar.gz {} \; ' –

5

आप उन्हें में रिक्त स्थान के साथ किसी भी निर्देशिका नाम है उस स्तर पर? यदि नहीं, तो आपकी स्क्रिप्ट ठीक काम करेगी।

$ for i in * 
do 
    echo tar czf $i.tar $i 
done 

तो फिर तुम उत्पादन को देखो और देखें कि क्या वह तुम क्या चाहते कर रहा है कर सकते हैं:

क्या मैं आमतौर पर करते हैं आदेश मैं बाहर गूँजती निष्पादित करने के लिए चाहते हैं के साथ एक पटकथा लिखने के लिए है। यह निर्धारित करने के बाद कि प्रोग्राम काम करेगा, कमांड लाइन संपादित करें और echo कमांड को हटा दें।

1

निर्देशिका की संख्या बहुत बड़ी हैं और उनके नाम बहुत लंबा है, तो

बयान संख्या के निष्पादन के एक

for i in * 
    do 
    echo tar czf $i.tar $i 
    done 

आप त्रुटि प्राप्त होगी "स्ट्रिंग बहुत लंबी"

1

तो देखते हैं के बाद निर्देशिका नामों में रिक्त स्थान, फिर केवल दोहरे उद्धरणों के अंदर चर डाल दें:

for i in * 
do 
    tar czf "$i.tar" "$i" 
done 
संबंधित मुद्दे