मैं वर्णानुक्रम में एक टार फाइल कैसे बनाऊं?


22

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

मैं मानता हूँ, यह आधा नवीनता, आधा मामूली अनुकूलन है। मैं बस विश्वास नहीं कर सकता कि ऐसा करने का एक आसान तरीका नहीं है। मेरा कुछ छूट रहा है।


2
तुम ऐसा क्यों करना चाहते हो?
मथायस क्रुल

ज्यादातर, यह इसलिए है क्योंकि मैं जानना चाहता हूं कि टार ऑपरेशन को पूरा करना कितना करीब है। जब फ़ाइलों को यादृच्छिक क्रम में लोड किया जा रहा है, तो -v ध्वज के साथ बताने का कोई तरीका नहीं है।
एरिक रॉबर्टसन

2
यह पूरी तरह सच नहीं है; यदि आप किसी फ़ाइल में आउटपुट को पाइप करते हैं और फ़ाइलों की संख्या जानते हैं (एक त्वरित खोज आदेश कहते हैं), तो आप प्रगति की भावना प्राप्त करने के लिए खोज से फ़ाइलों की संख्या के साथ -v आउटपुट (wc -l) की तुलना कर सकते हैं ...
Slartibartfast

2
@matthiaskrull मेरे पास इसके लिए असंबंधित कारण है, मैं VMWare ESX सर्वर पर VMs तैनात करने के लिए एक OVA फ़ाइल (जो एक टार फ़ाइल है) बना रहा हूं । OVA को इसके अंदर एक विशिष्ट क्रम में फ़ाइलों की आवश्यकता होती है (पहली फ़ाइल OVF और इसी तरह होनी चाहिए)।
एक्सएस्क 16'14

1
इसका एक बहुत अच्छा कारण भी है: एक बहुत बड़ी फ़ाइल पर प्रदर्शन जब आप इसका केवल एक हिस्सा निकालना चाहते हैं। चूंकि इसका क्रम डिफ़ॉल्ट रूप से यादृच्छिक है, और आप एक फ़ाइल / निर्देशिका निकालना चाहते हैं, अगर यह आदेश दिया जाता है कि यह तेज़ होगा, यदि यह नहीं है, तो इसे पूरा संग्रह को स्कैन करने की आवश्यकता होगी, इससे पहले कि यह समाप्त हो गया है।
स्ट्रोमटाइट

जवाबों:


12

Slartibartfast सही रास्ते पर है, लेकिन टार का डिफ़ॉल्ट व्यवहार निर्देशिकाओं में उतरना है, इसलिए आपको उत्पन्न टार फ़ाइल में शामिल एक ही फ़ाइल की एक से अधिक प्रतिलिपि प्राप्त हो सकती है। आप कर सकते हैं की जाँच करें - tar tf file.tar | sort समाधान टार करने के लिए -no-recursion विकल्प शामिल करने के लिए है। इसके अलावा, आप -print0 को खोजने के लिए विकल्प का उपयोग करके अजीब फ़ाइलनामों में भेजने में सक्षम होना चाहिए , फिर --nullटार के विकल्प का उपयोग करके । अंतिम परिणाम इस तरह दिखता है:

find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -

आप उपयोग करके टार फ़ाइल में ऑर्डर की जांच कर सकते हैं tar tsf tarfile.tar। हालाँकि आपको शायद -print0, -z, और --null विकल्पों की आवश्यकता नहीं होगी, जब तक आप नहीं जानते कि आप इसमें एक नई नाम के साथ फ़ाइल नाम का सामना करने जा रहे हैं, मैंने कभी कोशिश नहीं की।


--No-recursion विकल्प का उपयोग करने के लिए उत्कृष्ट सुझाव, धन्यवाद।
एरिक

यह वह उपाय है जो मेरे लिए काम करता है। मेरे पास एरिक की तुलना में एक अलग उपयोग मामला है और Google मुझे यहां लाया। मैं एक दूरस्थ प्रणाली की पूर्ण स्थिति के समय पर स्नैपशॉट एकत्र कर रहा हूं। डेटा अतिरेक है। टार इनपुट को समय के अनुसार छाँटना (फ़ाइलनाम में टाइमस्टैम्प होता है) कंप्रेसर के प्रदर्शन को बेहतर बनाता है। एक त्वरित परीक्षण कारक 2 (lzma2) द्वारा सुधार दिखाता है। इसके अलावा, मैं एक फाइलसिस्टम में संग्रह को अनपैक नहीं करता हूं, लेकिन टार प्रविष्टियों पर एक स्ट्रीम प्रोसेसिंग करता हूं। एक सॉर्ट की गई धारा बहुत अच्छा डिबग आउटपुट बनाती है और प्रक्रिया श्रृंखला में अन्य लाभ हैं। +1
जोहान्स

5

टार फाइल के भीतर फाइलों का क्रम वास्तव में मायने नहीं रखता है, क्योंकि जब फाइलें निकाली जाती हैं, तो फाइलसिस्टम वैसे भी ऑर्डर को संरक्षित नहीं करेगा।

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

% tar cf tarfile tmp/diff.txt src/hellow.c junkimage.IMG barry/thegroup
% tar tf tarfile
tmp/diff.txt
src/hellow.c
junkimage.IMG
barry/thegroup

2
या सिर्फ उत्पादन को क्रमबद्ध करें:tar tf tarfile | sort
डौग हैरिस

मेरे पास कमांड लाइन पर उन सभी को निर्दिष्ट करने के लिए बहुत सारी फाइलें (20,000+) हैं।
एरिक रॉबर्टसन

4
टार फ़ाइल के भीतर फाइलों का क्रम मायने रखता है यदि आपको डाउनलोड करते समय डिकम्प्रेस और डिस्प्ले करने की आवश्यकता है।
एरिक

फाइल सिस्टम पर निर्भर करता है।
Thorbjørn Ravn Andersen

4

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

find /source_directory -print | sort | tar -czf target.tgz -T -

अगर वह काम नहीं करता है (कभी नहीं की कोशिश की, तो मुझे पता नहीं है - इसका मतलब है कि -T तर्क के लिए स्टडिन):

find /source_directory -print | sort > /tmp/temporary_file_list
tar -czf target.tgz -T /tmp/temporary_file_list

फिर सवाल है कि क्यों। लेकिन कभी-कभी पूछना आसान नहीं होता है।


2
find . -depth -print0 | sort -z | pax -wvd0 > file.tar

पैक्स POSIX उत्तराधिकारी की तरह cpio और टार की तरह है और दोनों के सर्वोत्तम पहलुओं को फ्यूज करता है। यह डिफ़ॉल्ट रूप से टार अभिलेखागार (ustar) लिखता है। यह मीडिया के लिए ऑटोमैटिक स्पैनिंग और प्रॉम्प्टिंग भी करता है और जब यह किया जाता है तब एक सारांश प्रिंट करता है।


0

@ चार्लीहेर्रोन के उत्तर के विकल्प के रूप में, यदि आप केवल सामग्री (फ़ाइलें, सिमलिंक) और फ़ोल्डर मेटा-डेटा (जैसे, फ़ोल्डर अनुमति, माइम इत्यादि) को संरक्षित करने में रुचि रखते हैं, तो आप फ़ोल्डर को findआउटपुट से फ़िल्टर करना चाह सकते हैं ।

find paths -not -type d -print 0 | sort -z | tar cf tarfile.tar --null -T -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.