2012-07-18 33 views
9

मैं निम्नलिखित है मैं क्या करना चाहते हैं:
find . -maxdepth 6 (-name *.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o -name heasoft -o -name firefly -o -name starlink -o -name Chandra) -prune -o -print| tar cvf somefile.tar --files-from=-
अर्थात सामान की एक पूरी बहुत कुछ बाहर करते हैं, केवल 6 उपनिर्देशिका गहराई तक लग रहे हैं, और फिर एक बार छंटाई किया जाता है, टार अप बाकी।xargs साथ खोजने के लिए और टार

मुश्किल नहीं है। पाइप (|) 100% काम करने से पहले थोड़ा सा काम करता है। अगर मैं टैर को बाहर कर देता हूं, तो मुझे वह मिलता है जो मैं (स्क्रीन पर) के बाद करता हूं। लेकिन एक बार जब मैं पाइप, और टैर शामिल करता हूं, तो यह सबकुछ टायर करता है, जिसमें सभी चीजें शामिल हैं जिन्हें मैंने अभी खोज में छोड़ दिया है।

मैंने कई अलग-अलग पुनरावृत्तियों की कोशिश की है:
-print0 | xargs -0 tar rvf somefile.tar
-print0 | xargs -0 tar rvf somefile.tar --null --files-from = -
-print0 | tar cvf somefile.tar --null -T -

तो मैं गलत क्या कर रहा हूं? मैंने पहले यह किया है; लेकिन अब यह सिर्फ मुझे ग्रे बाल दे रहा है।

+0

मेरा मानना ​​है कि आप '* .tar.gz' आसपास उद्धरण से बचने यह' द्वारा पहले 'के लिए पारित bash' विस्तार किया जा रहा है की जरूरत है find' – drevicko

उत्तर

5

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

लगता है इससे पहले कि क्या कर रहे हैं "-ओ" मैं इस

find . -name "*.xyz" | xargs tar cvf xyz.tar; 

अपने मामले, मैं आश्चर्य में की तरह कुछ भाग गया

+4

मुझे ठीक कर लें मैं मैं गलत हूं, लेकिन मेरा मानना ​​है कि यदि आपके पास 'ढूंढ' द्वारा कई फाइल आउटपुट हैं, तो 'xargs' फ़ाइल सूची के सबसेट के साथ कई बार' tar' चलाएगा। दुर्भाग्यवश, '-c' फिर पिछली टैर फ़ाइलों को ओवरराइट करता है और आपको केवल अपनी अंतिम टैर फ़ाइल में अंतिम बार मिलता है। – drevicko

+0

आप इसे आजमा सकते हैं। मुझे सफलतापूर्वक 7-8 फाइलों की एक टैर फ़ाइल मिली जो मैंने खोज का उपयोग करके खोजा। यहां क्या होता है, रिटर्न आउटपुट ढूंढें और xargs उन्हें एक टैर फ़ाइल – rajshenoy

+2

@jajshenoy 7-8 फ़ाइलों को उत्पन्न करने वाले टैर पर फ़ीड करता है, शायद इस समस्या को उजागर करने के लिए पर्याप्त नहीं है। [इस पृष्ठ] में अनुभाग 'अधिकतम कमांड लम्बाई' पर एक नज़र डालें (http: // offbytwo।कॉम/2011/06/26/चीजों में आप फ्लॉप-पता के बारे में-xargs.html)। 'Echo | आज़माएं कमांड लाइन बफर xargs के आकार को देखने के लिए xargs --show-limit' का उपयोग कर रहा है - मेरे लिए यह 131072 है। यह काफी बड़ा है, लेकिन अगर आपके पास कुछ हज़ार फाइलें हैं, तो इसका उपयोग जल्दी से किया जाता है! – drevicko

3

यदि आपका खोज निर्देशिका वापस कर रहा है, तो उनको टैर पर भेज दिया जाएगा, और पूर्ण सामग्री को आपके खोज आदेश में बहिष्कारों के बावजूद शामिल किया जाएगा।

तो, मुझे लगता है कि आपको खोजने में "टाइप प्रकार" शामिल करने की आवश्यकता है।

13

मेरे लिए क्या काम किया गया है, खोजने के लिए प्रिंट प्रिंट का संयोजन है, और फिर - टाइल कमांड से - फाइलें। मेरे मामले में मुझे 5000+ लॉग फ़ाइलों को टैर करने की आवश्यकता है, लेकिन केवल xargs का उपयोग करने से मुझे परिणामस्वरूप फ़ाइल में 500 फाइलें दी गईं।

find . -name "*.pdf" -print | tar -czf pdfs.tar.gz --files-from - 

आपके पास "--files-से = -", जब आप बस "--files-से -" चाहते हैं और फिर मैं तुम्हें एक की जरूरत है - CVF के सामने, निम्नलिखित की तरह। ; Rm- आरएफ new.tgz: एक दिन के काम बैकअप के लिए मैं यह कर -

find . -maxdepth 6 (-name *.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o -name heasoft -o -name firefly -o -name starlink -o -name Chandra) -prune -o -print| tar -cvf somefile.tar.gz --files-from - 
+2

यह सही समाधान है क्योंकि '--files-from -' का उपयोग xargs सीमाओं (@ rajshenoy के उदाहरण पर टिप्पणियों में स्पष्ट) के साथ समस्या से बचाता है जिसके परिणामस्वरूप अधूरे अभिलेखागार होते हैं। –

0

मैं ऊपर दो दृष्टिकोण के संयोजन का उपयोग ढूंढो -टाइप एफ-एमटाइम 0 | xargs tar cvf new.tgz;

0

फ़ाइलों का उपयोग करने के लिए बिना किसी विकल्प के यह केवल मेरे लिए काम करना था। अन्य सभी विकल्पों में मेरी जेनरेट की गई सूची की बजाय निर्देशिका में सभी फाइलें शामिल थीं।

यह मेरा समाधान था:

find . ! -name '*.gz' -print | xargs tar cvzf ../logs.tar.gz --files-from 

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

  • कोई संबंधित समस्या नहीं^_^