निर्देशिका संरचना के बिना .tar फाइलें


32

मैं .tarपथ के साथ कुछ फ़ाइलें आईएनजी हूँ example/super_user/Output.*

परिणाम .tarइस तरह दिखता है:

+ example
    + super_user
          - Output.zip
          - Output.xml
          - Output.txt

लेकिन मैं चाहता हूं कि फाइल निम्नलिखित की तरह हो:

- Output.zip
- Output.xml
- Output.txt

क्या आप जानते हैं कि किसी अन्य निर्देशिका में रहते हुए भी मैं इसे कैसे प्राप्त कर सकता हूं?


इस तरह के अभिलेखागार के साथ तारकोल से बचने के लिए सुनिश्चित करें ।
ग्रैविटी

tar --strip- घटक = 1000?
ज़ार है

जवाबों:


11

टार फ़ाइल और फ़ोल्डर संरचना को संरक्षित करेगा, इसलिए मुझे नहीं लगता कि सृजन समय पर पदानुक्रम को समतल करने के लिए टार को निर्देश देने का कोई तरीका है।

एक वर्कअराउंड अस्थायी रूप से निर्देशिका को बदलने, टार बनाने, फिर वापस जाने के लिए है - नीचे एक त्वरित उदाहरण:

cd example/super_user && tar -cvf ../../result.tar Output.* && cd ../..

27

यदि निर्देशिका 'उदाहरण' फाइलसिस्टम के मूल में है, तो यहां एक और तरीका है:

tar -C /example/super_user -cvf result.tar .

यह निर्देशिका को उस बिंदु पर बदल देगा जिसे आप टार करना चाहते हैं। चेतावनी यह है कि यदि कोई उपनिर्देशिका / उदाहरण / super_user के अंतर्गत हैं, तो इन उप-निर्देशिकाओं के लिए निर्देशिका संरचना संरक्षित की जाएगी।


1
यह हाथ में समस्या का जवाब है। इस मामले में उल्लेखित चेतावनी समस्या नहीं है। समस्या के रूपांतरों के लिए अन्य सभी जवाब वर्कआराउंड हैं।
जोकी 10

यह वास्तव में इस सवाल का हल है। निर्देशिका को मूल होने की ज़रूरत नहीं है, निर्देशिका संरचना को चुनना /home/u/foo/bar, काम करना है /home/b, फिर tar -C foo/bar -cvf qiz.tar .अच्छी तरह से काम करता है। हालांकि, एक चेतावनी यह है कि आप वाइल्डकार्ड का उपयोग नहीं कर सकते, अर्थात tar -C foo/bar -cvf qiz.tar *.log, tar -C foo/bar -cvf qiz.tar "*.log"या tar -C foo/bar -cvf qiz.tar "foo/bar/*.log"काम नहीं करेंगे।
ब्राइस

1
यह ध्यान दिया जाना चाहिए कि आप -Cएक ही tarकमांड में कई बार उपयोग कर सकते हैं यदि आपको कई निर्देशिकाओं में फैली हुई कई फाइलों को जोड़ने की जरूरत है लेकिन फिर भी टार फाइल सपाट होना चाहिए।
शून्य 298

10

मैंने अपना उत्तर यहाँ पोस्ट किया है:

https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure

रेपोस्ट (आलसी पीपीएल के लिए)


यह बदसूरत है ... लेकिन यह काम करता है ...

मुझे भी यही समस्या थी, लेकिन कई फ़ोल्डरों के साथ, मैं बस हर फाइल को फ्लैट करना चाहता था। आप एक sed अभिव्यक्ति पास करने के लिए विकल्प "ट्रांसफॉर्म" का उपयोग कर सकते हैं और ... यह अपेक्षा के अनुरूप काम करता है।

यह अभिव्यक्ति है:

's/.*\///g' ('/' से पहले सब कुछ हटा दें)

यह अंतिम आदेश है:

tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info


7

एक निर्देशिका (DIR) से सभी फ़ाइलों के साथ एक टार (ARCHIVE.tar) बनाने के लिए, किसी भी मूल निर्देशिका जानकारी के बिना (यहां तक ​​कि नहीं। /), आप कुछ का उपयोग कर सकते हैं:

find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"

आप गहराई को सीमित करने के लिए, विशिष्ट फ़ाइलों का चयन करें, और कई अन्य चीजों के साथ खेल सकते हैं।

शुभ लाभ!


मैं OSX खोज कमांड में "खोज: -प्रिंट: अज्ञात प्राथमिक या ऑपरेटर" प्राप्त कर रहा हूं। कोई सुझाव?
TCB13

-printfएक गैर मानक कमांड है। उनमें से कई केवल विशिष्ट संस्करणों के साथ काम करते हैं। आमतौर पर हम उन लोगों को चिन्हित करते हैं जब सुपर यूजर (जैसे "-ब्लह के साथ एक Gnu एक्सटेंशन होता है और हर जगह काम नहीं करेगा")।
हेन्नेस

3

मैंने एक अस्थायी निर्देशिका बनाई। और निर्देशिका में, सभी फ़ाइलों को शामिल किए जाने वाली फ़ाइलों के लिए प्रतीकात्मक लिंक बनाए। तब मैंने टार-एच-सी किया। इतना है कि सभी फाइलें (लिंक नहीं, लेकिन उनकी सामग्री) संग्रह में वांछित नाम के साथ शामिल हैं।


1

यदि वे टारबॉल की संपूर्ण सामग्री हैं तो आप --strip-componentsफाइलों से पहले 2 स्तरों को हटाने के लिए GNU टार के विकल्प का उपयोग कर सकते हैं ।


मुझे केवल विकल्प मिला है --strip-pathलेकिन इसका उपयोग करने से कुछ भी नहीं बदलेगा।

1

अस्थायी परिवर्तन निर्देशिका का दूसरा तरीका कोष्ठक के अंदर cdऔर tarआज्ञा देना है ( ):

(cd example/super_user; tar -cvf ../../result.tar *)

इसका लाभ यह है कि, जब ब्लॉक किया जाता है, तो आप हमेशा मूल निर्देशिका में वापस आ जाएंगे। यानी के लिए कोई ज़रूरत नहीं pushd.. popdब्लॉक या रखने के लिए जहां cdवापस करने के लिए ट्रैक ।


0
pushd example/super_user
tar -cf output.tar Output.*
popd

पुशड वर्तमान निर्देशिका पथ को DIRस्टैक पर ले जाता है और सामग्री फ़ोल्डर में चला जाता है। उसके बाद, आप का उपयोग करके मूल निर्देशिका पर वापस जाएँ popd

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.