क्या cp की गति और प्रतिशत की प्रतिलिपि देखना संभव है?


251

मुझे समस्या हो रही है जब nautilus (यह अटक जाता है) का उपयोग करके बड़ी फ़ाइलों की प्रतिलिपि बना रहा है। मुझे का उपयोग करके कॉपी करने की आवश्यकता है cp। मैं जानना चाहूंगा कि क्या कोई पैरामीटर है जो% की प्रतिलिपि बनाता है और हस्तांतरण की गति भी दिखाता है।


39
आप rsyncइसके बजाय उपयोग कर सकते हैं cp। इसका एक --progressविकल्प है।
ठंढकुट्ज़

2
Midnight Commanderभी अच्छी तरह से काम करता है, और प्रगति सलाखों के साथ एक सुंदर पाठ-आधारित UI है, लेकिन स्थापित नहीं किया जा सकता है। mcकमांड प्रॉम्प्ट पर प्रयास करें । इसके अलावा, जाहिर है, यह नहीं है cp
बजे एक CVn

3
सिर्फ मेरे rsyncसाथ प्रयोग करने से --progressपता चलता है कि क्या हो रहा है। यह 100% तक पहुंचने पर अटक जाता है, और फिर अंत में कुछ मिनट तक रहता है। मुझे लगता है कि यह वही है जो नॉटिलस के साथ हो रहा है। वैसे भी यह एक और सवाल पहले से ही है, इसलिए इस सवाल का सबसे अच्छा जवाब है rsync --progress, यह आकार,%, गति और बीता हुआ समय दिखाता है।
yzT

2
rsync के साथ एक समस्या यह है कि यह शुद्ध कॉपी की तुलना में धीमी गति से चलता है। मेरे बड़े सर्वर पर, अंतर क्रमशः 60 एमबी / एस और 300 एमबी / एस है।
पीडवल्कर

1
@pdwalker -Wविकल्प के साथ भी ? मेरे सभी यजमान rsyncलगभग उतने ही तेज हैं cp... उतने करीब मैं नियमित रूप से rsyncइसके बजाय उपयोग करता हूं cp
स्कीपर

जवाबों:


193

rsyncएक ध्वज कहा जाता है progress2जो समग्र प्रतिशत दर्शाता है:

rsync --info=progress2 source dest

5
--info = प्रगति 2 ने अभी भी इसे डिफ़ॉल्ट रिपॉजिटरी में नहीं बनाया है और यहां यह 2015 है। यह एक अच्छा विचार है।
लोनिविबेल

1
--info=progress2अंत में शामिल किया गया version 3.1.0 protocol version 31। शायद आप अपना जवाब संपादित कर सकते हैं, yzT।
सोलापाजो डी एरिएरेस

1
मैंने देखा --info=progress2कि rsync तेजी से धधक रहा है! 200 एमबी / एस, जबकि विंडोज 90 एमबी / एस से आगे नहीं जाता है!
रेनेफ्रॉगर

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

7
यह मेरे लिए बस के साथ काम किया --progress। rsync संस्करण 3.0.9
adrianTNT

103

यदि आप अन्य उपकरणों की अनुमति देते हैं तो cpयह निश्चित रूप से संभव है। एक एकल फ़ाइल के लिए आप उपयोग कर सकते हैं pv। यह अच्छा आँकड़े प्रदान करने वाला एक छोटा उपकरण है।

pv inputfile > outputfile

यदि आपके पास कई फाइलें या निर्देशिकाएं हैं, तो आप टार का उपयोग कर सकते हैं:

tar c sourceDirectory | pv | tar x -C destinationDirectory

आप इसे शेल फ़ंक्शन में लपेट सकते हैं। यह टाइप करने के लिए कम है और आप शब्दार्थ को करीब से जान लेते हैं cp। यहाँ एक बहुत ही सरल (और त्रुटि-सबूत नहीं है!) फ़ंक्शन:

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

ध्यान दें कि कुछ संस्करण tarउपरोक्त सिंटैक्स (जैसे सोलारिस tar) का समर्थन नहीं करते हैं और आपको निम्न प्रकार का उपयोग करना होगा:

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

आप इसे इस तरह कहते हैं

cpstat sourceDirectory destinationDirectory

आप इसे और बढ़ा सकते हैं, ताकि pvबचे हुए समय का अनुमान प्रदान किया जा सके ।

एक अन्य समाधान (ठंढ के रूप में एक टिप्पणी में उल्लिखित) --progressविकल्प के साथ rsync का उपयोग करना है:

rsync --progress -a sourceDirectory destinationDirectory

1
cpstat pastebin =) में जा रहा है
मैट

7
यह आपको स्थानांतरण गति देगा, लेकिन ईटीए नहीं, क्योंकि pvयह नहीं जानता कि पाइप के माध्यम से कितना डेटा आएगा। आप इसका उपयोग करके निर्दिष्ट कर सकते हैं -s। उदाहरण के लिए पहले du -sh sourceDirectoryएक (मोटा) विचार प्राप्त करें, और फिर इसे pvइस तरह पास करें pv -s 100m:।
Jan Fabry

1
--info = प्रगति 2 आपको निर्देशिका स्तर प्रगति के आँकड़े देता है।
एलेक्सलॉर्ड टॉर्सेन

vbuf(डेबियन, ubuntu) pvअपने आभासी रिंग बफर की वजह से एक अच्छा सा तेज़ है , शायद
स्केपरन

@ शकरपेन मुझे नहीं पता vbuf। लेकिन जैसा कि लगता है यह फिलहाल डेबियन में अस्थिर है और इसलिए अक्सर उन सर्वरों पर उपलब्ध नहीं होता है जो आमतौर पर डेबियन स्थिर चल रहे हैं।
मार्को

58

rsync नकल की प्रगति के दौरान प्रगति दिखाने के लिए सबसे अच्छा काम करता है।

उदाहरण के लिए:

rsync -avh --progress sourceDirectory destinationDirectory

27

जैसा कि अन्य उत्तरों में बताया गया है, cp उस कार्यक्षमता को प्रदान नहीं करता है। हालाँकि, प्रगति (जिसे पहले cv कहा जाता था) एक छोटा उपकरण है जो इस लापता सुविधा को प्रदान करने में बहुत सहायक है।

इस टूल को एक टिनी डर्टी लिनक्स केवल * सी कमांड के रूप में वर्णित किया जा सकता है जो कोरुटिल्स मूल कमांड (cp, mv, dd, tar, gzip / gunzip, cat, ...) की तलाश करता है और वर्तमान में आपके सिस्टम पर चल रहा है और कॉपी किए गए प्रतिशत को प्रदर्शित करता है। डेटा।

मैं पिछले कुछ महीनों से इसका उपयोग कर रहा हूं और यह ठोस है।


सभी फाइल सिस्टम (जैसे cif) के साथ काम करने के लिए प्रतीत नहीं होता है, लेकिन +1, इस तरह के पागल टिंग
एक्सिट्स

1
ध्यान दें कि इस परियोजना को अब "प्रगति - कोरुटिल्स प्रोग्रेस व्यूअर (पहले cv के रूप में जाना जाता है)" कहा जाता है।
चाप्पज

17

क्या cp की गति और प्रतिशत की प्रतिलिपि देखना संभव है?

हां, cpटर्मिनल पर कमांड की प्रगति को प्रदर्शित करना संभव है ।


विधि # 1: (उपयोग करें progress)

एक नया टर्मिनल खोलें और टाइप करें progressयह cpकमांड और अन्य कमांड की प्रगति प्रदर्शित करेगा जैसे:

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

यदि आपने इंस्टॉल नहीं किया है progress, तो आप इसे रिपॉजिटरी से इंस्टॉल कर सकते हैं, उदाहरण के लिए CentOSइस कमांड के साथ yum -y install progress:।

उसके बाद जब आप cpपृष्ठभूमि में कमांड चलाते हैं , या cpसामान्य रूप से चलाने के बाद , एक और टर्मिनल खोलें, तो बस इस कमांड को आज़माएं:

# progress -m

आउटपुट देखें:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

विधि # 2: (पैच का उपयोग करें cp)

या जीएनयू डाउनलोड करें coreutilsऔर इसे पैच करें।

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

Daud:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

कॉपी दो फ़ाइलों cpऔर mvतहत loacated coreutils-8.21/src/लिए /usr/local/bin:

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

या रूट के रूप में अपने फ़ाइल प्रबंधक का उपयोग करके इसे कॉपी करें

निम्नलिखित पंक्तियों को अपने साथ जोड़ें ~/.bashrc:

alias cp='cp -gR'
alias mv='mv -g'

लॉगआउट करें और लॉगिन करें

प्रगति पट्टी को लेखक द्वारा अनुशंसित –gया उसके बिना प्रदर्शित किया जा सकता है–progress-bar

आउटपुट देखें:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

स्रोत: linuxhelp


1
यह cpपैच के असली स्रोत की तरह दिखता है : web.archive.org/web/20131115171331/http://beatex.org/web/…
कौशल मोदी

1
progressकमांड के बारे में संकेत के लिए +1
पीटर

यह एकमात्र वास्तविक उत्तर है
एलेसियो

14

यह पोस्टिंग कुछ पुरानी थी। लेकिन जैसा कि मैंने हाथ में मुद्दे का हल बनाया है, मैंने सोचा कि मैं अपना समाधान पोस्ट करूंगा।

परिदृश्य: हमारे पास एक बहुत बड़ी निर्देशिका-संरचना है जिसे हम कॉपी करना चाहते हैं, इसलिए हम एक टर्मिनल विंडो में कमांड cp -R sourcedir destdir जारी करते हैं।

एक और टर्मिनल विंडो खोलें या प्रक्रिया को पृष्ठभूमि पर धकेलें (Ctrl+Z,bg<CR>), तो चलिए एक प्रगति संकेतक बनाते हैं यहूदी बस्ती का रास्ता:

हम पहले उस निर्देशिका संरचना का कुल आकार प्राप्त करते हैं जिसे हम कॉपी करना चाहते हैं, आप इसके साथ करते हैं:

du -sh /path/sourcedirectory/

परिणाम को गीगाबाइट्स (G) में परिवर्तित करें, फिर n को उस चर के लिए स्थानापन्न करें जिसके परिणाम आपको चर स्रोतों में मिले। एक बार जब आप स्रोत और गंतव्य (गंतव्य निर्देशिका) सम्मिलित कर लेते हैं, तो नीचे दी गई कमांड को चलाएं।

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

यह हर 10 सेकंड में संदेशों के साथ प्रगति को प्रिंट करेगा:

0.100% completed
0.200% completed
0.300% completed 
... etc

मुझे पता है कि इस समाधान ने कॉपी करने की गति को संबोधित नहीं किया था, लेकिन ऊपर दिए गए आदेशों का विस्तार करके, संभवतः इसे बैश स्क्रिप्ट में बनाकर जोड़ना संभव होगा, इसलिए इसे पढ़ना आसान होगा। उदाहरण के लिए जाँच करके कि कितना डेटा जनसंपर्क कॉपी किया गया है। एन टाइम यूनिट, गति की गणना और प्रदर्शित करने के लिए तुच्छ होना चाहिए।


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

यह बहुत अच्छा है, विशेष रूप से ऐसे मामलों में जैसे कि मैं अभी अनुभव कर रहा हूं: दूरस्थ रूप से पहले से निहितार्थों के बारे में विचार किए बिना, एक भंडारण पूल से दूसरे में बैकअप के टेराबाइट्स को स्थानांतरित करने के लिए एक विशाल एमवी-नौकरी शुरू की। अब मैं इस प्रक्रिया को आसानी से देख सकता हूँ और उस पर झाँक सकता हूँ। बहुत बढ़िया!
रिले

8

मार्को के जवाब में सुधार करने के लिए, आज मैंने इस संस्करण को लिखा है cpstat, जिससे आप कई निर्देशिकाओं को कॉपी कर सकते हैं और गंतव्य पथ के रूप में अंतिम पैरामीटर का उपयोग कर सकते हैं। ध्यान दें कि यदि आप स्रोत के रूप में एक रिश्तेदार गहरे रास्ते का उपयोग करते हैं, तो आप tarस्वचालित रूप से उसी निर्भर निर्देशिका ट्री को बनाने के लिए धन्यवाद कर सकते हैं ।

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}

6

के मानक संस्करण में नहीं cp

आप cp को पृष्ठभूमि में रख सकते हैं औरcp समाप्त होने की प्रतीक्षा करते हुए आकार को सूचीबद्ध कर सकते हैं।

मैं एक फ़ाइल के विकास की निगरानी के लिए इस पर्ल का उपयोग करता हूं, लेकिन यह बाह्य रूप से cp (या जो कुछ भी मैं कर रहा हूं) पर चलता है



5

हालांकि rsyncआप कुछ प्रगति आँकड़े देंगे, यदि आप एक प्रगति बार चाहते हैं जो आपको उपयोग करना चाहिए pv

आप उपयोग कर सकते हैं cpv, एक pvआसान वाक्यविन्यास के साथ एक आवरण , इसके समान है cpजो आप निर्देशिकाओं की प्रतिलिपि बनाने के लिए उपयोग कर सकते हैं

यहां छवि विवरण दर्ज करें

आप इसे यहाँ प्राप्त कर सकते हैं


संकेत के लिए +1 pv। अच्छा लगा!
पीटर

4

mc(आधी रात कमांडर) जैसे उपकरण का उपयोग करना अन्य उत्तरों के लिए एक अच्छा वैकल्पिक विकल्प हो सकता है।

यह एक साधारण फ़ाइल प्रबंधक है जो आपको कॉपी / मूव प्रगति दिखाता है।


4

dd status=progress

GNU Coreutils 8.24+ (Ubuntu 16.04) में जोड़ा गया विकल्प:

dd if=src of=dst status=progress

Stdout समय-समय पर अद्यतन की जाने वाली पंक्ति है जैसे:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

यह भी देखें: आप dd की प्रगति की निगरानी कैसे करते हैं? | उबंटू से पूछें


4

एक और सरल उपाय सिर्फ करने के लिए है देखने के रूप में इस आउटपुट फ़ोल्डर:

लिनक्स / Cygwin: watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

FreeBSD: gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>

यह उपयोगी उपयोगिता चलेगी duऔर मतभेदों को उजागर करेगी ।

एक अन्य संभावित समाधान एक सरल स्क्रिप्ट लिखना होगा जो लूप, कॉलिंग duऔर थ्रूपुट के किसी न किसी अनुमान को थूकता है।


3

यह उपकरण एक लिनक्स यूटिलिटी कमांड है, जो वर्तमान में आपके सिस्टम पर चल रहे कोरट्यूट्स बेसिक कमांड्स (cp, mv, dd, tar, gzip / gunzip, cat इत्यादि) की तलाश करता है और कॉपी किए गए डेटा का प्रतिशत प्रदर्शित करता है:

https://github.com/Xfennec/cv


1
यह पहले ही @AmrMostafa द्वारा Nov'14 में सुझाया जा चुका है।
डब्यू

2

मेरे पास सिर्फ एक मामला था जहां फाइल सिस्टम में FUSE बग के कारण cp कम या ज्यादा अवरुद्ध था।

यदि आप बस cp से स्विच नहीं कर सकते (यानी क्योंकि --sparse = हमेशा) और कुछ ऐसा चाहते हैं जो वास्तव में प्रगति के लिए विश्वसनीय हो, तो / खरीद के माध्यम से जाएं।

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0

0

वीसीपी - शाप इंटरफ़ेस में फ़ाइलों की प्रतिलिपि बनाएँ (लिनक्स में प्रगति बार दिखाएं)।

वर्णन: vcp फ़ाइलों और निर्देशिकाओं को एक शाप इंटरफ़ेस में कॉपी करता है, जिसमें पाठ केवल आउटपुट उपलब्ध होता है। इसके विकल्प और आउटपुट कुछ नई सुविधाओं को जोड़ने के दौरान बीएसडी के सीपीपी के समान हैं।

यह जानकारी प्रदान करता है:

  • फ़ाइलें कॉपी की गईं और कॉपी करना छोड़ दिया
  • डेटा लिखित और कुल डेटा आकार
  • डेटा हर सेकंड लिखा जा रहा है
  • दो स्थिति बार, एक वर्तमान फ़ाइल स्थिति दिखा रहा है, अन्य कुल स्थिति (1 फ़ाइल को छोड़कर, दोनों वर्तमान दिखाते हैं), और प्रतिशत

जब आउटपुट कंसोल पर भेजा जाता है:

  • एक स्थिति पट्टी
  • आकार की प्रतिलिपि बनाई गई और गति

वीसीपी मैन पेज: https://linux.die.net/man/1/vcp

डाउनलोड vcp-2.2.tar.gz से:

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

निर्भरता: शाप। (libncurses-dev)।

उबंटू पर, स्थापित करें:

sudo apt-get install libncurses-dev

या

sudo apt-get install libncurses5-dev

INSTALL vcp:

make && make install

मैनुअल:

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