उन फ़ाइलों की सूची टार करें जो सभी मौजूद नहीं हैं


10

जैसे स्क्रिप्ट से कमांड चला रहा हूं

tar -c -f ar.tar a b c d

जहां b, c, और d मौजूद नहीं हो सकते हैं, और निर्देशिकाएं हो सकती हैं। समाधान के उत्पादन पाइप कर रहे हैं के साथ आते हैं कि मैंने ls -dकरने के लिए grepहै, तो में splicing tarआदेश, या के लिए विस्तारित globs को चालू करने से @(a|b|c|d)

क्या ऐसा करने का कोई तरीका है? मैं डेबियन व्हीज़ी पर हूँ, जिसके पास कोई --includeपैरामीटर नहीं है।


क्या आपके पास --ignore-failed-readविकल्प है?
कोस्टा

1
कोशिश की, अभी भी उन फ़ाइलों के लिए एक त्रुटि दी है जो बिल्कुल मौजूद नहीं हैं।
जिदिन 11

1
हां, त्रुटि संदेश मौजूद है लेकिन संग्रह बनाया गया है।
कोस्टा

जवाबों:


8

तुम कोशिश कर सकते हो

 tar cf ar.tar $(ls a b c d )

कहाँ पे

  • c बनाने के लिए
  • f ar.tar टार फ़ाइल निर्दिष्ट करें

  • $(ls a b c d) स्टड को सूची देगा कि कौन सी फ़ाइल वास्तव में मौजूद है (और अन्य के लिए त्रुटि दें)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)पूरी तरह से काम करता है .. लेकिन मुझे लगता है कि यह extglob के साथ क्लीनर है
gidyn

अब मैं स्क्रिप्ट को डैश करने के लिए पोर्ट कर रहा हूं, इसलिए नहीं extglob- मैं ऊपर अपनी टिप्पणी में कोड का उपयोग कर रहा हूं
gidyn

1

यदि आप कर सकते हैं टार संग्रह में फ़ाइलों का पूरा पथ होना ठीक है:

tar -c -f ar.tar $(readlink -e a b c d)

-eरीडिंकल का विकल्प मौजूदा फाइलनामों को रद्द कर सकता है और चुपचाप किसी भी अन्य को अनदेखा कर सकता है।


मुझे लगता है कि अगर मैं --strip-componentsनिकालने के दौरान काम कर सकता हूँ ।
गिदिन

0

उपयोग

find path/to/dir -name "*.ext1" -o -name "*.ext2"

व्याख्या

  1. पहला पैरामीटर वह निर्देशिका है जिसे आप खोजना चाहते हैं।
  2. डिफ़ॉल्ट रूप findसे पुनरावृत्ति करता है।
  3. -oके लिए खड़ा है -or। तो ऊपर इस वाइल्डकार्ड या यह एक के लिए खोज का मतलब है। यदि आपके पास केवल एक पैटर्न है तो इसकी कोई आवश्यकता नहीं है -o
  4. वाइल्डकार्ड पैटर्न के आसपास के उद्धरण आवश्यक हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.