Frage Wie zeigt man den Übertragungsfortschritt und die Geschwindigkeit beim Kopieren von Dateien mit cp?


Gibt es sonst ein anderes Befehlszeilen-Dienstprogramm, das dies erreichen kann?


274
2017-12-14 04:48


Ursprung




Antworten:


Während cp hat diese Funktionalität nicht, die Sie verwenden können pv um dies zu tun:

pv my_big_file > backup/my_big_file

Hinweis: Diese Methode verliert die Berechtigungen und die Eigentümerschaft der Datei. Auf diese Weise kopierte Dateien haben die gleichen Berechtigungen, als wenn Sie sie selbst erstellt hätten und Ihnen gehören würden.

In diesem Beispiel pv im Grunde nur die Datei auf stdout *, die Sie in eine Datei mit der > Operator. Gleichzeitig werden Informationen über den Fortschritt an das Terminal ausgegeben, wenn Sie dies tun.

So sieht es aus:

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

Möglicherweise müssen Sie das tun Installieren Sie pv (alternativ, geben Sie ein sudo apt-get install pv) auf Ihrem System.


*: Das technische bisschen

Es gibt drei wichtige Datenströme in einem unixartigen System: stdout (Standardausgabe), stderr (Standardfehler) und stdin (Standardeingabe). Jedes Programm hat sozusagen alle drei. Das > Umleitungsoperator leitet die Programmausgabe in eine Datei um. Ohne Argumente, wie Sie oben sehen, > leitet das Programm um Standardausgabe zu einer Datei. cp macht im Grunde nichts schicker als

cat source > destination

(woher cat liest einfach eine Datei und druckt sie auf stdout). pv ist genau wie cat, aber wenn Sie den Ausgabestream woanders umleiten, werden die Fortschrittsinformationen stattdessen auf stdout gedruckt.

Sieh dir das an man pv um mehr darüber zu erfahren.


Eine andere Option, als alt textDoR schlägt vor diese Antwort, verwenden Sie stattdessen rsync:

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

Dadurch bleiben die Berechtigungen / Besitzrechte der Dateien erhalten, während der Fortschritt angezeigt wird.


204
2017-12-14 05:17



Es kann oder kann nicht signifikant sein (abhängig von der Situation), aber pv behandelt Berechtigungen nicht auf die gleiche Weise wie cp tut ... (basierend auf einem schnellen Test habe ich versucht: pv Das Execute-Bit wurde nicht kopiert. rsync hat getan. - Peter.O
IMO: alias cp="rsync -avz" CP ist veraltet. - Marco Ceppi♦
Wenn du wie ich bist, und vergiss es pvdu kannst hineinschnüffeln /proc/PID of cp/fd und /proc/PID of cp/fdinfo um den Fortschritt herauszufinden. (Es liegt an dir, die Geschwindigkeit abzuschätzen.) Ich benutze diese Technik, um zuzusehen updatedb. - Thanatos
Ja, -z sollte wahrscheinlich nur für Netzwerkkopien verwendet werden; Das Komprimieren und Dekomprimieren der Daten für eine lokale Kopie ist reiner Overhead. - Matthew Read
@Rodrigo rsync -avzP ist, was du verwenden willst. - Marco Ceppi♦


Es ist nicht. Sehen Hier warum? Obwohl es mehr als Sie benötigt, hat rsync eine mit --progress Parameter. Das -a behält die Berechtigungen usw. und -h wird für Menschen lesbar sein.

rsync -ah --progress source destination

Die Ausgabe sieht ungefähr so ​​aus:

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



Das funktioniert super im aktuellen Ubuntu (14.10). Es unterstützt auch die -rFlag zum Wiederherstellen von Verzeichnissen. Es kann sogar Alias ​​als direkter Ersatz für cp sein: alias cp="rsync -ah --progress" - rustyx
Dank OS X können Sie die Funktionen nutzen, die mit den im Lieferumfang des Systems enthaltenen Tools verbunden sind. - Ivan X
Das ist großartig, die Ausgabe sieht so aus filename MB-copied MB-speed time-remaining) - Rudolf Olah
Ich mag diese Alternative besser als pv, besonders weil rsync Teil der Standardinstallation ist - Joao Costa
Vielen Dank für das Teilen. Ich bin derzeit auf macOS 10.12.x homebrew Version von rsync 3.1.2 laufen und verwenden --progress lässt meinen Kopf drehen und beobachtet die Ausgabeanzeige im Terminal. Also diejenigen, die von AOL Keyword-Suchen hierher kommen, rsync -ah --info=progress2 [source] [destination]  präsentiert die Ausgabe in einer etwas gesunderen Weise IMHO. - Chris


Wenn Sie sehen möchten, ob Ihre Dateien korrekt übertragen werden, können Sie sie verwenden gcp und gcp ist wie CP, aber standardmäßig gibt es einen Fortschrittsbalken, so dass Sie sehen können, was kopiert wird. Wie das Programm ist Wiki-Notizen, gcp hat mehrere nützliche Funktionen wie

  • Transferfortschrittsanzeige
  • Fortlaufendes Kopieren bei Fehler (zur nächsten Datei springen)
  • copy status logging: gcp protokolliert alle Aktionen, so dass man wissen kann, welche Dateien erfolgreich kopiert wurden
  • name mangling, um Einschränkungen des Ziel-Dateisystems zu handhaben (zum Beispiel das Löschen von inkompatiblen Zeichen "*" oder "?" auf FAT)

Auch wenn der Fortschrittsbalken bei Verwendung des Tools jedoch 100% erreicht hat, müssen Sie warten, bis die Eingabeaufforderung erneut angezeigt wird, bevor Sie Ihr Medium sicher entfernen, damit Sie sicherstellen können, dass der Übertragungsprozess erfolgreich abgeschlossen wurde.

gcp wird zum Kopieren von Dateien verwendet und verfügt über Optionen wie --preserve damit verschiedene Attribute und Berechtigungen erhalten werden können und --recursivedamit ganze Verzeichnisse kopiert werden können. Weitere Informationen zu den Optionen finden Sie, indem Sie eingeben man gcp oder indem du zum Ubuntu-Hilfeseiten online. Ein Tutorial ist ebenfalls verfügbar auf dieser Seite.

Installieren gcp aus den Repositories mit

sudo apt-get install gcp

(Hinweis: In Ubuntu 12.10 ist der neue Automount-Punkt zum Beispiel /media/user/usbdisk)

Sie können eine Datei auf Ihr Medium kopieren, indem Sie eingeben

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

und kopiere einen Ordner auf dein Medium mit

gcp -rv ~/Podcasts /media/Mik2

Beispielausgabe von gcp mit der Fortschrittsanzeige:

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

Sie können natürlich mehrere Dateien oder Ordner angeben, die auf Ihre Festplatte kopiert werden sollen, und es sind viele weitere Optionen enthalten man gcp.


84
2017-10-15 11:09



Habe Fehler über ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
Wenn Sie ein X11-Display auf dem Gerät geöffnet haben, können Sie einfach einstellen export DISPLAY=:0.0 bevor du gcp startest. Wenn die Maschine kopflos ist, dann müssten Sie eine Xsession in einen virtuellen Framebuffer oder etwas starten, an diesem Punkt sollten Sie wahrscheinlich nach einem anderen Programm suchen - user292067
gcp ist ziemlich anständig, aber die DBUS / X-Anforderung ist seltsam. Ich habe dies über SSH mit ssh-Weiterleitung behandelt: ssh -X user@host und das erlaubte mir, es zu führen. - Oli♦


Es macht mir Spaß, cURL für genau diesen Zweck zu benutzen. Die man-Seite listet das "FILE" -Protokoll als unterstützt auf, also benutze es einfach wie jedes andere Protokoll in einer URL:

curl -o destination FILE://source

Geschwindigkeit, Fortschritt, verbleibende Zeit und mehr - alles in einem vertrauten Format.


54
2018-02-02 09:00



Dies ist besonders in Umgebungen von Vorteil, in denen Sie keine neuen Tools installieren dürfen und rsync nicht verfügbar ist.
Brilliant, das muss ein absolut bekannter Hack sein! - ionreflex
Gute Antwort! Klug! - 9301293
Dies hat vermutlich die gleicher Nachteil wie pv, dass es keine Berechtigungen speichern wird. - Ploni


Während es keine Geschwindigkeit anzeigt, wenn Sie mehrere Dateien kopieren, die -v Option zum cp Befehl liefert Ihnen Fortschrittsinformationen. z.B.

cp -rv old-directory new-directory

22
2017-12-14 17:17



Fortschrittsinfo? Dies ist nur eine ausführliche Ausgabe. Um Fortschrittsinformationen bereitzustellen, müssten Sie zumindest jetzt wissen, wie viele Dateien oder sogar welche Dateien kopiert werden müssen. - Julian F. Weinert


Der Kernel kennt die meisten Daten wie Geschwindigkeit und oft auch Prozent. Moderne Kernel setzen dies über ihr / proc-Dateisystem frei.

Geschwindigkeit aus https://github.com/jnweiger/showspeed benutzt diese Info. Es kann an bereits laufende Programme angefügt werden und regelmäßige Updates wie folgt geben:

$ 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



Schön. Wie funktioniert es aber prozentual? Ich denke, nur im Falle von Dateien offen wie nur lesen? Und es wird wahrscheinlich nicht im Falle von verstreutem Zugriff funktionieren. - j_kubik
In diesem Fall können Sie auch ein anderes Terminal zum Ausführen verwenden pkill -USR1 dd zu machen dd zeige seinen Status, wäre eine andere Option watch -n 1 pkill -USR1 dd um es periodisch (jede Sekunde) seinen Fortschritt zeigen zu lassen. - Yaron
Recht. Viele Tools haben eine integrierte Möglichkeit, Statistiken im Zeitverlauf zu melden. dd ist keine Ausnahme. Moderne Implementierungen haben eine Status = Fortschritt Option. Showspeed ist eine klassische Unix-Stil "ein Werkzeug für einen Zweck" -Lösung - genau wie pv. Aber es hat verschiedene Anwendungsfälle: Denken Sie an Tassen, die eine Datei durch Ghostscript pumpen, oder Sie wollen die ETA für ein laufendes CP oder Teer wissen. Es könnte zu 95% bereits nach ein paar Stunden erledigt sein und Sie möchten das wahrscheinlich nicht einfach neu starten, nur um pv hinzuzufügen ... Streuzugriff würde nicht gut funktionieren. Showspeed nur Proben suchen Positionen. - Jürgen Weigert


Während pv kann mit lokalen umgehen cp Aufgaben, mit dd mit pv kann sowohl mit lokalen (cp) und fern (scp) Aufgaben.

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

Bitte stellen Sie sicher, dass path/to/dest.mkv beendet durch touch path/to/dest.mkv

Dies kann den Fortschritt anzeigen, aber wenn Sie die prozentuale Information möchten,

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

Ersetzen 100M oben mit der realen Größe Ihrer Quelldatei.

Hier kommt der Remote Part

Während scp kann kaum aktuellen Fortschritt zeigen, mit dd mit pv ist ein Stück Kuchen.

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

11
2018-01-05 08:08



Neuere dd hat status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功


Es gibt ein neues Tool namens cv, das jeden Deskriptor finden kann, der sich auf einen laufenden Befehl bezieht und Fortschritt und Geschwindigkeit anzeigt: https://github.com/Xfennec/cv

cv -w

gibt die Statistiken für alle laufenden cp, mv usw. Operationen aus


10
2017-07-13 11:33



watch cv -q ist noch schöner - nwgat
Es zeigt nur Fortschritt für einzelne Dateien an, es erkennt, ob a cp kopiert ein Verzeichnis rekursiv oder nicht. - Flimm
Es wurde umbenannt in Fortschritt. Tolles Werkzeug! - sebastian


Es gibt ein Tool namens progress In den Repositories können verschiedene Befehle überprüft und Fortschrittsinformationen angezeigt werden.

Installieren Sie es mit dem Befehl

sudo apt-get install progress

Dieses Tool kann so verwendet werden:

cp bigfile newfile & progress -mp $!

Ausgabe:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)

10
2017-09-26 22:35