टार सूची फ़ाइलें केवल


16

मजेदार तथ्य: यदि आप आर्काइव मैनेजर का उपयोग करते हैं और एक .tar.gz निकालते हैं, ताकि आपके पास "डायरेक्ट्री स्ट्रक्चर रखें", तो आपको टार्बोबॉम मिल जाएगा ।

tar -ztfएक टार फ़ाइल में सभी फ़ाइलों और निर्देशिकाओं को सूचीबद्ध करता है। क्या निर्देशिका संरचना के बिना एक टार फाइल में सभी फाइलों को सूचीबद्ध करने का एक तरीका है ?


आप के साथ 'टार्बोम्ब' प्रभाव प्राप्त कर सकते हैं tar xvzf my_tar.tar.gz --transform 's/.*\///'। लेकिन दुर्भाग्य से यह नहीं बदलता है कि यह एक लिस्टिंग में प्रदर्शित करता है tबजाय के साथ x
ire_and_curses

4
जो मुझे परेशान करता है, वह यह है कि अच्छी तरह से संरचित अभिलेखागार को आसानी से बड़े पैमाने पर निष्कर्षण के हथियार बनाने के लिए इस्तेमाल किया जा सकता है।
Eero Aaltonen

जवाबों:


17

मुझे मैन पेज से इसे करने का कोई तरीका नहीं दिखता है, लेकिन आप हमेशा परिणाम फ़िल्टर कर सकते हैं। निम्नलिखित आपके फ़ाइल नामों में कोई नई बात नहीं मानता है:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

यह काम किस प्रकार करता है

फ़ील्ड विभाजक को सेट करने से /, अंतिम फ़ील्ड के awkबारे में पता चलता है ( $NF) या तो फ़ाइल नाम है यदि यह किसी फ़ाइल नाम को संसाधित कर रहा है या खाली है यदि यह निर्देशिका नाम को संसाधित कर रहा है ( tarनिर्देशिका नामों के लिए अनुगामी स्लैश जोड़ता है)। तो, हम मूल रूप awkसे अंतिम क्षेत्र को प्रिंट करने के लिए कह रहे हैं यदि यह खाली नहीं है।


Awk के साथ बहुत अच्छा काम :)
Eero Aaltonen

5

यूसुफ आर। के सुझाव का उपयोग करते हुए , फ़ाइलों के लिए regex [^/]$का उपयोग grepलाइनों के साथ समाप्त नहीं होने की तलाश में किया जा सकता है /

tar tzf archive.tar.gz | grep -e "[^/]$"


यह अभी भी foo/barबस के विपरीत के रूप में आउटपुट bar। आप चाहते हैं grep -Eo '[^/]+$'(GNU grep के साथ)।
स्टीफन चेज़लस

4

यह मानते हुए कि कोई भी फ़ाइल नाम नई नहीं है:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

पहला sed कमांड अंतिम से पहले /एक लाइन पर सब कुछ हटा देता है , ताकि केवल फ़ाइल नाम वाला भाग ही प्रिंट हो। दूसरी कमांड उन लाइनों को हटा देती है जो अब खाली हैं, यानी जो लाइनें समाप्त हो गई हैं /, जो निर्देशिका हैं।


sed: -e अभिव्यक्ति # 2, char 2: अज्ञात कमांड: `/ 'और sed वाक्यविन्यास बहुत अच्छा नहीं लगता है ... सहज ज्ञान युक्त
Eero Aaltonen

@EeroAaltonen मैंने sed कमांड को ठीक किया। वास्तव में, वाक्यविन्यास कुछ गूढ़ है (मैं अपने उत्तर में स्पष्टीकरण शामिल करता हूं)।
गिल्स एसओ-

2

pax(पोज़िक कमांड के साथ tarफाइल पढ़ने के लिए):

pax -'s@.*/@@' < file.tar

(जो निर्देशिकाओं सहित उनके प्रकार की परवाह किए बिना सभी फाइलों को सूचीबद्ध करता है)।

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