سؤال كيفية إظهار تقدم النقل والسرعة عند نسخ الملفات مع cp؟


خلاف ذلك ، هل هناك أي أداة بديلة سطر الأوامر التي يمكن أن تحقق هذا؟


274
2017-12-14 04:48


الأصل




الأجوبة:


في حين cp لم تحصل على هذه الوظيفة ، يمكنك استخدامها pv لفعل هذا:

pv my_big_file > backup/my_big_file

ملاحظة: ستفقد هذه الطريقة أذونات الملف وملكيته. ستحصل الملفات التي تم نسخها بهذه الطريقة على نفس الأذونات كما لو أنك أنشأتها بنفسك وستكون ملكًا لك.

في هذا المثال، pv في الأساس مجرد إخراج الملف إلى المعياري * ، والتي تقوم بإعادة التوجيه إلى ملف باستخدام > المشغل أو العامل. في الوقت نفسه ، فإنه يطبع معلومات حول التقدم إلى المحطة عند القيام بذلك.

هذا ما يبدو عليه:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

قد تحتاج ل تثبيت pv (بدلا من ذلك ، اكتب sudo apt-get install pv) على نظامك.


*: الجزء الفني

هناك ثلاثة تيارات هامة للبيانات في نظام يشبه نظام unix: stdout (الإخراج القياسي) ، stderr (الخطأ القياسي) و stdin (الإدخال القياسي). كل برنامج لديه كل ثلاثة ، إذا جاز التعبير. ال > يعيد مشغل إعادة التوجيه توجيه إخراج البرنامج إلى ملف. بدون الحجج ، كما ترون أعلاه ، > يعيد توجيه البرنامج الإخراج القياسي إلى ملف. cp في الأساس لا شيء مربي أكثر من

cat source > destination

(أين cat فقط يقرأ ملف وطباعته إلى stdout). pv مثل القط ، ولكن إذا قمت بإعادة توجيه دفق الإخراج في مكان آخر ، فستقوم بطباعة معلومات التقدم إلى stdout بدلاً من ذلك.

إلقاء نظرة على man pv لمعرفة المزيد حول هذا الموضوع.


خيار آخر ، كما alt textدور يقترح في هذا الجواب، هو استخدام rsync بدلاً من ذلك:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

سيؤدي هذا إلى الحفاظ على أذونات / ملكية الملفات أثناء عرض التقدم.


204
2017-12-14 05:17



قد يكون أو لا يكون كبيرا (حسب الحالة) ، ولكن pv لا يتعامل مع أذونات بنفس الطريقة cp يفعل ... (على أساس اختبار سريع واحد حاولت: pv لم ينسخ بت تنفيذ عبر .. rsync فعل. - Peter.O
IMO: alias cp="rsync -avz" CP عفا عليها الزمن. - Marco Ceppi♦
إذا كنت مثلي ، وتنسى pv، يمكنك الذهاب التطفل فيها /proc/PID of cp/fd و /proc/PID of cp/fdinfo لمعرفة التقدم. (الأمر متروك لك لاستنتاج السرعة.) يمكنني استخدام هذه التقنية لمشاهدة updatedb. - Thanatos
نعم فعلا، -z يجب أن تستخدم فقط لنسخ الشبكة ؛ ضغط و إلغاء ضغط البيانات للحصول على نسخة محلية هو الحمل الصافي. - Matthew Read
Rodrigo rsync -avzP هو ما تريد استخدامه. - Marco Ceppi♦


ليس هناك نرى هنا لماذا. على الرغم من أنها تقوم بأكثر مما تحتاج ، إلا أن rsync بها واحد --progress معامل. سوف تحتفظ -a الأذونات ، إلخ ، و -h سيكون الإنسان للقراءة.

rsync -ah --progress source destination

سيبدو الإخراج شيئًا كالتالي:

Pictures/1.jpg
      2.13M 100%    2.28MB/s    0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
      1.68M 100%    1.76MB/s    0:00:00 (xfr#5899, to-chk=0/5905)

130
2017-10-15 08:06



هذا يعمل بشكل جيد في Ubuntu الحالي (14.10). كما يدعم -r العلم لتوجيه الأدلة. يمكن حتى أن يكون مستعارًا كبديل مباشر لـ cp: alias cp="rsync -ah --progress" - rustyx
تتضخم الأعمال على OS X ، مع مكافأة القدرة على استخدام الأدوات المضمنة في النظام. - Ivan X
هذا رائع ، يبدو الإخراج filename MB-copied MB-speed time-remaining) - Rudolf Olah
أنا أحب هذا البديل أفضل من الكهروضوئية ، وخاصة لأن rsync هو جزء من التثبيت القياسي - Joao Costa
bartekbrak شكرا على المشاركة. أنا حاليا على MACOS 10.12.x تشغيل الإصدار homebrew من rsync 3.1.2 واستخدام --progressيجعل رأسي تدور يراقب كل عرض الإخراج في المحطة. إذن ، هؤلاء القادمون من AOL يبحثون عن الكلمات الرئيسية ، rsync -ah --info=progress2 [source] [destination]  يعرض الإخراج بطريقة IMHO أكثر قليلا عاقل عاقل. - Chris


إذا كنت ترغب في معرفة ما إذا كانت الملفات الخاصة بك تقوم بالنقل بشكل صحيح ، فيمكنك استخدامها gcp و gcp يشبه cp ولكن بشكل افتراضي يمنحك شريط تقدم بحيث يمكنك مشاهدة ما يتم نسخه. كما في البرنامج ملاحظات ويكي، gcp لديه العديد من الميزات المفيدة مثل

  • نقل مؤشر التقدم
  • النسخ المستمر على الخطأ (انتقل إلى الملف التالي)
  • نسخ تسجيل الحالة: يسجل gcp جميع إجراءاته بحيث يمكن معرفة الملفات التي تم نسخها بنجاح
  • تشابك الاسم للتعامل مع قيود نظام الملفات الهدف (على سبيل المثال حذف الحروف غير المتوافقة "*" أو "؟" على FAT)

ومع ذلك ، حتى عندما يصل شريط التقدم إلى 100٪ عند استخدام الأداة ، يجب عليك الانتظار حتى يظهر موجه المحطة الطرفية الخاص بك مرة أخرى قبل إزالة الوسائط الخاصة بك بأمان حتى تتمكن من التأكد من انتهاء عملية النقل بنجاح.

gcp يستخدم لنسخ الملفات ولديه خيارات مثل --preserve بحيث يمكن الحفاظ على السمات والأذونات المختلفة و --recursiveبحيث يمكن نسخ الدلائل بأكملها. يمكن العثور على مزيد من المعلومات حول خياراته عن طريق إدخال man gcp أو من خلال الذهاب إلى Ubuntu manpages online. البرنامج التعليمي هو متاح أيضا على هذا الموقع.

التثبت gcp من المستودعات مع

sudo apt-get install gcp

(ملحوظة: في Ubuntu 12.10 نقطة automount الجديدة ، على سبيل المثال ، /media/user/usbdisk)

يمكنك نسخ ملف إلى الوسائط الخاصة بك عن طريق إدخال

gcp /home/mike/file.mp4 /media/usb

ونسخ مجلد إلى الوسائط الخاصة بك مع

gcp -rv ~/Podcasts /media/Mik2

إخراج عينة من gcp مع شريط التقدم:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

يمكنك بالطبع تحديد عدة ملفات أو مجلدات لنسخها على القرص ، وهناك الكثير من الخيارات الأخرى التي تمت تغطيتها man gcp.


84
2017-10-15 11:09



حصلت على خطأ معها على سه dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
إذا كان لديك شاشة X11 مفتوحة على الجهاز ، يمكنك ضبطها export DISPLAY=:0.0 قبل البدء في gcp. إذا كان الجهاز بلا رأس ، فيجب عليك بدء تشغيل xsession إلى framebuffer ظاهري أو شيء ما ، في هذه المرحلة ، ربما عليك البحث عن برنامج آخر - user292067
gcp هو لائق جدا ولكن شرط DBUS / X هو غريب. لقد تعاملت مع هذا عبر SSH باستخدام إعادة توجيه ssh: ssh -X user@host وهذا سمح لي بتشغيله. - Oli♦


احصل على طرد من استخدام cURL لهذا الغرض بالضبط. تسرد الصفحة man بروتوكول "FILE" كما هو مدعوم ، لذلك استخدمه فقط مثل أي بروتوكول آخر في عنوان URL:

curl -o destination FILE://source

السرعة والتقدم والوقت المتبقي والمزيد - كل ذلك في صيغة مألوفة.


54
2018-02-02 09:00



هذا أمر رائع خاصة في البيئات حيث يحظر عليك تثبيت أدوات جديدة وحيث rsync غير متوفر.
رائع ، يجب أن يكون هذا هو الإختراق غير المعروف! - ionreflex
إجابة لطيفة! ذكي! - 9301293
هذا يفترض أن لديه نفس العائق مثل pv، أنه لن يحفظ الأذونات. - Ploni


في حين أنها لا تعرض السرعة ، عند نسخ ملفات متعددة ، فإن -v الخيار الى cp سيزودك الأمر بمعلومات التقدم. مثلا

cp -rv old-directory new-directory

22
2017-12-14 17:17



معلومات التقدم؟ هذا هو مجرد خرج مطول. لتوفير معلومات التقدم ، تحتاج على الأقل الآن إلى عدد الملفات ، أو حتى الملفات التي تحتاج إلى نسخ. - Julian F. Weinert


يعرف النواة معظم البيانات مثل السرعة ، وغالبًا ما تكون النسبة المئوية أيضًا. تُعرِّض النواة الحديثة ذلك عبر نظام الملفات / proc.

showspeed من https://github.com/jnweiger/showspeed يستخدم هذه المعلومات. يمكن أن يعلق على البرامج قيد التشغيل وإعطاء تحديثات دورية مثل هذا:

$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18
p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...

19
2018-02-25 14:34



هذا لطيف. كيف تعمل النسب المئوية على الرغم من؟ أعتقد فقط في حالة فتح الملف للقراءة فقط؟ وربما لن تعمل في حالة الوصول المتناثر. - j_kubik
في هذه الحالة ، يمكنك أيضًا استخدام محطة طرفية أخرى للتشغيل pkill -USR1 dd ليصنع dd إظهار حالتها ، سيكون خيار آخر watch -n 1 pkill -USR1 dd لجعله يظهر تقدمه بشكل دوري (كل ثانية). - Yaron
حق. حصلت العديد من الأدوات على طريقة مبسطة للإبلاغ عن الإحصاءات بمرور الوقت. دد ليست استثناء. تحتوي التطبيقات الحديثة على خيار status = progess. Showspeed هو الحل الكلاسيكي لأسلوب Unix "أداة واحدة لغرض واحد" - تمامًا مثل pv. ولكن لها حالات مختلفة: فكر في الكؤوس التي تضخ ملفًا عبر ghostscript أو تريد معرفة ETA للحصول على cp أو tar دائمًا. قد يكون 95٪ قد تم بالفعل بعد بضع ساعات ، وربما لا ترغب في إعادة تشغيل ذلك فقط لإضافة pv ... لن يعمل الوصول المبعثر بشكل جيد. Showspeed عينات فقط تسعى المواقف. - Jürgen Weigert


في حين pv يمكن التعامل مع المحلية cp المهام ، باستخدام dd مع pv يمكن التعامل مع كل من المحلية (cp) والبعيدscp) مهام.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

يرجى التأكد من path/to/dest.mkv مخارج touch path/to/dest.mkv

هذا يمكن أن يُظهر التقدم ، لكن إذا كنت تريد النسبة المئوية للمعلومات ،

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

يحل محل 100M أعلاه مع الحجم الحقيقي للملف المصدر الخاص بك.

هنا يأتي الجزء البعيد

في حين scp يمكن بالكاد تظهر التقدم الحالي ، وذلك باستخدام dd مع pv هي قطعة من الكعكة.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

11
2018-01-05 08:08



أحدث dd لديها status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功