tar -C एक वाइल्डकार्ड फ़ाइल पैटर्न के साथ


17

क्या मैं निर्देशिकाओं को बदलने और वाइल्डकार्ड फ़ाइल पैटर्न का उपयोग करने के लिए टार कमांड का उपयोग कर सकता हूं?

मैं जो करने की कोशिश कर रहा हूं, यहां है:

tar -cf example.tar -C /path/to/file *.xml

यह काम करता है अगर मैं निर्देशिका (-C) को नहीं बदलता, लेकिन मैं टार फ़ाइल में पूर्ण पथ से बचने की कोशिश कर रहा हूं।

tar -cf example.tar /path/to/file/*.xml

यहाँ कुछ अन्य प्रयास किए गए हैं:

tar -cf example.tar -C /path/to/file *.xml
tar -cf example.tar -C /path/to/file/ *.xml
tar -cf example.tar -C /path/to/file/ ./*.xml
tar -cf example.tar -C /path/to/file "*.xml"

और यह मुझे मिलने वाली त्रुटि है:

tar: *.xml: Cannot stat: No such file or directory

मुझे पता है कि इस काम को करने के अन्य तरीके हैं (खोज, एक्सएआरजीएस, आदि का उपयोग करके), लेकिन मैं सिर्फ टार कमांड के साथ ऐसा करने की उम्मीद कर रहा था।

कोई विचार?

जवाबों:


18

समस्या यह है, * .xml शेल द्वारा व्याख्या की जाती है, टार द्वारा नहीं। इसलिए xml फ़ाइलें जो इसे ढूँढती हैं (यदि कोई है) निर्देशिका में हैं तो आपने टार कमांड चलाया।

आपको उन फ़ाइलों का चयन करने के लिए एक मल्टी-स्टेज ऑपरेशन (शायद पाइप शामिल करना) का उपयोग करना होगा और फिर उन्हें टार करना होगा।

सबसे आसान तरीका सिर्फ cdउस निर्देशिका में होगा जहां फाइलें हैं:

$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)

कार्य करना चाहिए।

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


9

आपके एक प्रयास में:

tar -cf example.tar -C /path/to/file "*.xml"

* चरित्र वास्तव में टार को पारित किया है। हालाँकि, समस्या यह है कि टार केवल वाइल्डकार्ड का समर्थन करता है जो किसी पुरालेख के सदस्यों के नाम पर मेल खाता है। इसलिए, जब आप संग्रह से सदस्यों को निकालते या सूचीबद्ध करते समय वाइल्डकार्ड का उपयोग कर सकते हैं, तो आप संग्रह बनाते समय वाइल्डकार्ड का उपयोग नहीं कर सकते।

ऐसी स्थितियों में अक्सर मैं खोजने का सहारा लेता हूं (जैसे कि आपने पहले ही उल्लेख किया है)। यदि आपके पास जीएनयू है, तो उसके पास केवल -प्रिंट विकल्प का उपयोग करके, केवल सापेक्ष पथ को प्रिंट करने का अच्छा विकल्प है:

find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.