निर्देशिका प्रतिलिपि के लिए पीवी के माध्यम से प्रगति की जानकारी


14

मुझे एक बहुत बड़ी निर्देशिका (यहां टेराबाइट्स में बात करते हुए) की प्रतिलिपि बनाने और प्रगति की निगरानी करना चाहते हैं।

मैंने पाया कि pvयह एक अच्छी उपयोगिता है, लेकिन मैं इसे पुनरावर्ती निर्देशिकाओं की प्रतिलिपि बनाने के लिए कैसे उपयोग कर सकता हूं? ( pv src > dstकाम नहीं करता क्योंकि वे निर्देशिका हैं)

पुनश्च: ओएस एक्स माउंटेन लायन पर चल रहा है, pvमैक पोर्ट्स से स्थापित किया गया था

जवाबों:


21

उपयोग rsync --progress [SRC] [DST]

man rsyncपृष्ठ की जाँच करें क्योंकि इसमें बहुत उपयोगी विकल्प हैं। -aसंग्रह के लिए एक अच्छी शुरुआत है, लेकिन यह आपकी सटीक आवश्यकताओं पर निर्भर करता है।

एक पाइप के माध्यम से नकल अनावश्यक रूप से कॉपी प्रक्रिया को धीमा कर देगी, खासकर अगर यह फाइलों पर आधारित है।


पाइप के माध्यम से नकल प्रक्रिया को धीमा क्यों करेगी? पाइप द्वारा प्रदान की गई बफरिंग और पाइप से जुड़े मल्टी-टास्किंग से उन मामलों में मदद मिलने की संभावना है जो मैं कहूंगा। (और rsync बहु-प्रक्रिया है और आंतरिक रूप से IIRC पाइप का उपयोग करता है)। फाइल-आधारित नहीं है कि एक कॉपी-प्रक्रिया क्या है?
स्टीफन चेजेलस 19

बैश सुविधाजनक है, लेकिन तेज नहीं है। विशेष रूप से जब एक कमांड को दूसरे से पाइपिंग किया जाता है।
जिप्पी

@StephaneChazelas: क्योंकि एक पाइप का बफर केवल 8KB है। Rsync जैसे प्रोग्राम एक बहुत बड़े आंतरिक बफर का उपयोग करना चाहते हैं।
ज़ैन लिंक्स

10

आप उपयोग tarकर सकते हैं या paxया cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
इसके अतिरिक्त, आप फ़ाइल नामों को देखने के vलिए tarकमांड में जोड़ सकते हैं ।
पेटर्फ़

तो यह कॉपी करने से पहले सोर्स फोल्डर को जिप करेगा, है ना? मेरा फ़ोल्डर आकार में 5 टीबी है, इसलिए मुझे यकीन नहीं है कि यह करने का सबसे अच्छा तरीका है? मैं वास्तव में pv का उपयोग करना पसंद करता हूं क्योंकि यह वास्तव में अच्छी प्रगति की स्थिति दिखाता है, कृपया कोई सलाह?
ताक

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

@ StéphaneChazelas टिप्पणी के लिए धन्यवाद। मैंने इसे आज़माया है और यह काम कर रहा है, केवल यही है कि प्रगति बार अपेक्षित प्रतिशत नहीं दिखाता है जो बाएं से दाएं जाता रहता है। कोई विचार क्यों? मैंने इस पैरामीटर -पेट्रा के साथ pv का उपयोग किया, जो आमतौर पर प्रगति बार को दिखाता है जहां बार खत्म होने तक भरा रहता है। मैंने आपके उत्तर को भी उकेरा है।
तक

@ टेक, pvयह जानने का कोई तरीका नहीं है कि हस्तांतरण करने के लिए कितना डेटा है। यदि आपके पास उस राशि का अनुमान है, तो आप इसे -sविकल्प के साथ पास कर सकते हैं ( du -sb srcयदि फाइल काफी बड़ी है तो GNU आपको एक अच्छा सन्निकटन देगा)
Stéphane Chazelas

2

टार।

tar -cf - /var/log/ | pv | tar -C . -x

उदाहरण:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

प्रगति की जानकारी के साथ निर्देशिकाओं को कॉपी करने के लिए यहां कुछ कमांड हैं।


यदि कई छोटी फाइलें हैं:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

यह कॉपी की गई फ़ाइलों की संख्या के आधार पर प्रगति की रिपोर्ट करेगा।

/dev/nullयदि आपको आवश्यकता नहीं है तो आप पुनर्निर्देशित कर सकते हैं logfile

निम्नलिखित कमांड का उपयोग करें filecount:

find sourcedir | wc -l

यदि कुछ विशाल फ़ाइलें हैं:

tar c sourcedir | pv -s size | tar x -C targetdir

यह कॉपी किए गए बाइट्स के आधार पर प्रगति की रिपोर्ट करेगा।

targetdir मौजूद होना चाहिए।

निम्नलिखित कमांड का उपयोग करें size:

du -sh sourcedir

यदि आप rsync का उपयोग करना चाहते हैं:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

जाओ filecountके रूप में ऊपर दिखाए गए।

यदि आप एक ही सिस्टम पर कॉपी कर रहे हैं तो rsync -aव्यावहारिक रूप से उसी के समान है cp -a। Rsync का लाभ तब है जब आप नेटवर्क पर कॉपी कर रहे हैं या यदि आप पिछली कॉपी को अपडेट (या तुलना) कर रहे हैं।

अधिक जानकारी के लिए यहां देखें:


0

आप du -b /directory/स्रोत और गंतव्य दोनों पर कर सकते हैं जबकि एक सामान्य प्रतिलिपि कमांड जारी है, और दोनों की तुलना करें। यह उतना ही प्रभावी है और एक पाइप के माध्यम से इसे धक्का देकर कॉपी प्रक्रिया को धीमा नहीं करता है।


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