2013-09-07 2 views
5

मेरे पास विभिन्न उपनिर्देशिकाओं में कई सौ से हजार फ़ाइलें हैं जो सभी एक मूल निर्देशिका में रहते हैं, उदा।निर्देशिका संरचना के बिना विभिन्न निर्देशिकाओं से फ़ाइलों को संग्रहित करने के लिए टैर का उपयोग कैसे करें

/home/dir1/file1 
/home/dir2/file2 
/home/dir3/file3 
... 
/home/dir10000/file10000 

मैं टैर का उपयोग कैसे कर सकता हूं ताकि मेरा टैर संग्रह इस तरह दिखता हो?

file1 
file2 
file3 

मैं यह सुनिश्चित कर सकता हूं कि फ़ाइल नाम अद्वितीय हैं। मैं मूल निर्देशिका संरचना शामिल नहीं करना चाहता हूं।

आपके लिए धन्यवाद लोगों की मदद!

उत्तर

-1

ओपन कमांड लाइन और टाइप

tar -cvf NAME.tar /home/dir1/file1 /home/dir1/file2 /home/dir1/file3 

आशा इस मदद करता है :)

+0

मेरे पास कई 100-10000 फ़ाइलें हैं जहां मुझे नाम पता नहीं है। कोई अन्य विचार जहां मैं बस/होम निर्देशिका का उपयोग कर सकता हूं? – user1876422

+0

यह टारबॉल –

+0

में निर्देशिका संरचना से बचने की ओपी चिंता का उत्तर नहीं देता है मूल रूप से यह अभी भी tar/tgz में फ़ोल्डर संरचना बना देगा – ghitesh

2

सम्भावित समाधान पाइप को (अपने stdout पर थूकना) साधारण tar आदेश का उपयोग करें और उसके बाद करने के लिए हो सकता है tardy में संग्रह, शायद इसकी -No_Directories विकल्प के साथ, यानी

tar cf - /home/dir?/ | tardy -No-Directories > yourbig.tar 

हालांकि, मुझे यकीन नहीं है कि यह एक अच्छा विचार है। एक टैर बॉल जो एक ही निर्देशिका में हजारों फाइलों में निकालने जा रहा है, एक अच्छा विचार नहीं है (कुछ फाइल सिस्टम उस से बुरी तरह व्यवहार करते हैं)।

3

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

cat filelist | xargs tar -rvf archive.tar --transform='s|.*/||g' 

ध्यान रखें कि यह एक टार संग्रह करने के लिए जोड़ है (यह अगर यह अभी तक मौजूद नहीं बना दिया जाएगा) ताकि आप संग्रह से हटाने के लिए अगर यह पहले से ही उस आदेश को चलाने से पहले से मौजूद है चाहते हैं।

3

cat ing या | के बिना इस को हल करने के अन्य कार्यक्रमों के लिए एक ही रास्ता ing:

tar --transform 's,.*/,,g' -cvf mytarfile.tar /path/to/parent_dir 

# --transform accepts a regular expression similar to sed. 
# I used "," as a delimiter so I don't have to escape "/" 
# This will replace anything up to the final "/" with "" 
# /path/to/parent_dir/sub1/sub2/subsubsub/file.txt -> file.txt 
# /path/to/parent_dir/file2.txt -> file2.txt 

विपरीत हारून Okano का तात्पर्य, वहाँ xargs को पाइप करने की कोई जरूरत है, तो आप फ़ाइलों की एक लंबी सूची के भीतर है एक एकल/कुछ मूल निर्देशिका जो आप कमांड लाइन पर निर्दिष्ट कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे