तार संग्रह जो फ़ाइलों की सूची से इनपुट लेता है


166

मेरे पास एक फ़ाइल है जिसमें उन फ़ाइलों की सूची है जिन्हें मैं टार के साथ संग्रहित करना चाहता हूं। चलो बुलावा आयाmylist.txt

इसमें शामिल है:

file1.txt
file2.txt
...
file10.txt

क्या कोई तरीका है जो मैं TAR कमांड जारी कर सकता हूं जो mylist.txtइनपुट के रूप में लेता है ? कुछ इस तरह

tar -cvf allfiles.tar -[someoption?] mylist.txt

ताकि यह वैसा ही हो जैसे कि मैं यह आदेश जारी करता हूं:

tar -cvf allfiles.tar file1.txt file2.txt file10.txt 

4
टार मैन पेज इस विकल्प के लिए बेहद कम है (कम से कम RedHat 5.4 के माध्यम से 6.3): "-T: फ़ाइल F से निकालने या बनाने के लिए नाम प्राप्त करें"। "निकालें या बनाएं" लगता है जैसे यह टर्क आर्काइव से फ़ाइलों को लेने के लिए लागू होता है, लेकिन उन्हें अंदर नहीं डाल रहा है। -Xबाहर करने का विकल्प पुराने यूनिक्स टार कमांड से बचता है, लेकिन मैं -I (शामिल) नहीं था!
ओगरे भजन 33

manएक EXAMPLESखंड के साथ कुछ पृष्ठ हैं , इसके बावजूद यह एक मानक खंड है । < Unix.stackexchange.com/questions/306189/… > देखें ।
सैम बोसालिस

जवाबों:


262

हाँ:

tar -cvf allfiles.tar -T mylist.txt

काश मैं mylist.txt में टिप्पणी डाल सकता है .. क्या mylist.txt के अंदर से कुछ टार विकल्प का उपयोग करके कोई वर्कअराउंड है?
स्टीफन

7
@ स्टेफ़ेन सरल है, --exclude ध्वज का उपयोग करके यह अनुमति देता है। मान लें कि आपकी टिप्पणी लाइनें '#' के साथ शुरू होती हैं, तो एक कमांड जैसे कि निम्नलिखित में से कोई भी प्रयास किए गए फ़ाइल ऑपरेशनों को अनदेखा / बहिष्कृत कर सकता है, जिनमें cmments वाली लाइनें शामिल हैं, यानी आपकी कमांड इस तरह दिख सकती है: tar -cvf allfiles.tar --exce = '^ ^ # '-T mylist.txt टार एक त्रुटि की रिपोर्ट करता है, लेकिन जब आप अपने टार संग्रह की जांच करते हैं, तो कोई त्रुटि नहीं होती है, और सूची से सभी फाइलें आपके संग्रह के अंदर होती हैं।
मैट जी

यह इंगित करते हुए कि यह कमांड लिनक्स संस्करण के लिए है और सनोस या अन्य वेरिएंट पर उन लोगों के लिए, नीचे दिए गए अन्य उत्तरों की जांच करें। उदाहरण के लिए सनोस के लिए, दो विकल्प जिनका मैंने परीक्षण किया है: tar -cvf file.tar -I list.txt और tar -cvf file.tar $ (cat list.txt)
नासरी नजीब

-L mylist.txtAIX पर
रोलैंड

82

जीएनयू टार मान लें (जैसा कि यह लिनक्स है), -Tया --files-fromविकल्प वह है जो आप चाहते हैं।


3
यह विकल्प भी FreeBSD से 10 पर "bsdtar 3.1.2" में मौजूद है
drue

33

आप उन फ़ाइल नामों में भी पाइप कर सकते हैं जो उपयोगी हो सकते हैं:

find /path/to/files -name \*.txt | tar -cvf allfiles.tar -T -

2
क्या होगा अगर .txt फ़ाइलों की सूची वास्तव में बहुत बड़ी है? क्या एक को tar -r के बजाय xarg कमांड का उपयोग करना चाहिए?
स्टीफन

1
@ स्टीफन हम्म, मुझे नहीं लगता कि इस विधि के लिए सूची की लंबाई ज्यादा मायने रखती है। वास्तव में, मुझे लगता है कि यह विधि xargs से बेहतर है क्योंकि डेटा को जोड़ने के लिए xargs बार-बार राल करेगा, लेकिन मैंने वास्तव में तरीकों को साइड से परीक्षण नहीं किया है।
मारट

2
जब एक पाइप नियोजित किया जाता है, जो यहां मामला है, तो ऑपरेटिंग सिस्टम पाइप के दोनों किनारों पर धाराएं बनाता है और डेटा के उत्पादन और खपत को सिंक्रनाइज़ करता है। फाइलों की सूची अनंत हो सकती है। आप रास्पबेरी पाई ज़ीरो का उपयोग करके पूरे इंटरनेट को टार / gz कर सकते हैं, यह देखते हुए कि आपके पास पाइप के अंत में पर्याप्त भंडारण है।
रिचर्ड गोम्स

14

टार के कुछ संस्करण, उदाहरण के लिए, HP-UX पर डिफ़ॉल्ट संस्करण (मैंने 11.11 और 11.31 का परीक्षण किया है), फ़ाइल सूची को निर्दिष्ट करने के लिए कमांड लाइन विकल्प शामिल नहीं है, इसलिए एक अच्छा काम-आस-पास यह करना है:

tar cvf allfiles.tar $(cat mylist.txt)

4
UUoC (अनावश्यक उपयोग cat), बस $(<mylist.txt)
डेविड सी। रंकिन

2
ध्यान दें कि यह कमांड लाइन की अधिकतम लंबाई से अधिक हो सकती है यदि mylist.txtबड़ा है
आंद्रे होल्ज़नर

उस मामले में tar -T <(<mylist.txt)। इस जवाब की तरह बेमानी।
माइक डी

7

सोलारिस पर, आप उन फ़ाइलनामों को पढ़ने के लिए विकल्प -I का उपयोग कर सकते हैं जिन्हें आप सामान्य रूप से एक फ़ाइल से कमांड लाइन पर बताएंगे। कमांड लाइन के विपरीत, यह सैकड़ों हजारों फाइलों के साथ टार अभिलेखागार बना सकता है (बस यही किया था)।

तो उदाहरण पढ़ेंगे

tar -cvf allfiles.tar -I mylist.txt

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