Ist es möglich, die Kopiergeschwindigkeit und den Kopierprozentsatz zu sehen?


251

Ich habe Probleme beim Kopieren großer Dateien mit Nautilus (es bleibt hängen). Ich muss kopieren, mit cp. Ich würde gerne wissen, ob es irgendwelche Parameter gibt, die den kopierten Prozentsatz und auch die Übertragungsgeschwindigkeit anzeigen.


39
Sie könnten rsyncanstelle von verwenden cp. Es hat eine --progressOption.
Frostschutz

2
Midnight Commanderfunktioniert auch gut und hat eine hübsche textbasierte Benutzeroberfläche mit Fortschrittsbalken, ist aber möglicherweise nicht installiert. Versuchen Sie es mcan der Eingabeaufforderung. Offensichtlich auch nicht cp.
einen Lebenslauf vom

3
Die Verwendung von rsyncwith --progresshat mich dazu gebracht, herauszufinden, was gerade passiert. Es bleibt hängen, wenn es 100% erreicht, und dauert dann am Ende ein paar Minuten. Ich denke, es ist dasselbe, was mit Nautilus passiert. Wie auch immer, das ist bereits eine andere Frage. Die beste Antwort für diese Frage ist die rsync --progress: Größe,%, Geschwindigkeit und verstrichene Zeit.
yzT

2
Ein Problem bei rsync ist, dass es langsamer läuft als eine reine Kopie. Auf meinem großen Server beträgt der Unterschied 60 MB / s bzw. 300 MB / s.
PDWalker

1
@pdwalker auch mit der -WOption? Auf allen meinen Hosts rsyncist es fast so schnell wie cp... so nah nutze ich regelmäßig rsyncstatt cp.
Skaperen

Antworten:


193

rsynchat ein Flag aufgerufen, progress2das den Gesamtprozentsatz zeigt:

rsync --info=progress2 source dest

5
--info = progress2 hat es immer noch nicht in ein Standard-Repository geschafft und hier ist es 2015. Scheint eine gute Idee zu sein.
Lonniebiz

1
--info=progress2endlich aufgenommen am version 3.1.0 protocol version 31. Vielleicht könntest du deine Antwort bearbeiten, yzT.
Sopalajo de Arrierez

1
Mir ist aufgefallen, --info=progress2dass Rsync blitzschnell ist! 200 MB / s, während Windows 90 MB / s nicht überschreitet!
ReneFroger

1
@ReneFroger Obwohl dies die tatsächliche Geschwindigkeit sein kann (abhängig vom Gerät), ist diese Geschwindigkeit unter Linux häufig falsch. Nach Abschluss des Kopiervorgangs schreibt das System weiterhin auf das Gerät, anders als unter Windows, wenn Sie das Gerät auswerfen können fast sofort. Wenn Sie große Dateien kopieren, können Sie feststellen, wie es mit dieser Geschwindigkeit beginnt, aber dann geht es bis zum Standard.
yzT

7
es hat bei mir einfach geklappt --progress. rsync version 3.0.9
adrianTNT

103

Wenn Sie andere Tools zulassen, ist cpdies mit Sicherheit möglich. Für eine einzelne Datei können Sie verwenden pv. Es ist ein kleines Tool, das nette Statistiken liefert.

pv inputfile > outputfile

Wenn Sie mehrere Dateien oder Verzeichnisse haben, können Sie tar verwenden:

tar c sourceDirectory | pv | tar x -C destinationDirectory

Sie können es in eine Shell-Funktion einbinden. Es ist weniger zu tippen und die Semantik kommt denen von sehr nahe cp. Hier ist eine sehr einfache (und nicht fehlersichere!) Funktion:

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

Beachten Sie, dass einige Versionen von tardie oben genannte Syntax nicht unterstützen (z. B. Solaris tar) und Sie die folgende Variante verwenden müssen:

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

Du nennst es so

cpstat sourceDirectory destinationDirectory

Sie können es weiter verbessern, um pveine Schätzung der verbleibenden Zeit zu erhalten.

Eine andere Lösung (wie frostschutz in einem Kommentar erwähnt) ist die Verwendung von rsync mit der --progressOption:

rsync --progress -a sourceDirectory destinationDirectory

1
cpstat geht in den Pastebin =)
Matt

7
Dies gibt Ihnen Übertragungsgeschwindigkeit, aber keine ETA, da pvnicht bekannt ist, wie viele Daten durch die Pipe kommen werden. Sie können dies mit angeben -s. ZB zuerst tun , du -sh sourceDirectoryum eine (grobe) Idee zu bekommen, und dann geben sie an pv, wie folgt aus : pv -s 100m.
Jan Fabry

1
--info = progress2 gibt Ihnen eine Fortschrittsstatistik auf Verzeichnisebene.
AlexLordThorsen

vbuf(debian, ubuntu) ist ein gutes Stück schneller als pv, wahrscheinlich wegen seines virtuellen Ringpuffers
Skaperen

@ Kaperen Ich weiß es nicht vbuf. Aber wie es scheint, ist es momentan in Debian instabil und daher oft nicht auf Servern verfügbar, auf denen normalerweise Debian stable läuft.
Marco

58

rsync funktioniert am besten, um den Fortschritt während des Kopiervorgangs anzuzeigen.

Ex:

rsync -avh --progress sourceDirectory destinationDirectory

27

Wie in anderen Antworten erläutert, bietet cp diese Funktionalität nicht. Allerdings Fortschritt (früher cv) ist ein kleines Tool , das bei der Bereitstellung dieses fehlende Feature ist sehr hilfreich.

Dieses Tool kann als Tiny Dirty Linux Only * C-Befehl beschrieben werden, der nach grundlegenden Coreutils-Befehlen (cp, mv, dd, tar, gzip / gunzip, cat, ...) sucht und den Prozentsatz der auf Ihrem System ausgeführten Kopien anzeigt Daten.

Ich benutze es seit ein paar Monaten und es ist solide.


scheint nicht mit allen Dateisystemen zu funktionieren (z. B. cifs), aber +1, wusste nicht, wie verrückt ting Exits
akostadinov

1
Beachten Sie, dass dieses Projekt jetzt "progress - Coreutils Progress Viewer (früher bekannt als cv)" heißt.
chappjc

17

Ist es möglich, die Kopiergeschwindigkeit und den Kopierprozentsatz zu sehen?

Ja, es ist möglich, den Fortschritt des Befehls cpauf dem Terminal anzuzeigen .


Methode 1: (verwenden progress)

Öffnen Sie ein neues Terminal, und geben progressSie Folgendes ein, um den Fortschritt des cpBefehls und anderer Befehle anzuzeigen :

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

Wenn Sie nicht installiert progress, können Sie es aus dem Repository installieren, zum Beispiel in dem CentOSmit diesem Befehl: yum -y install progress.

Öffnen Sie dann nach dem Ausführen des cpBefehls im Hintergrund oder nach dem cpnormalen Ausführen ein anderes Terminal. Probieren Sie einfach diesen Befehl aus:

# progress -m

Siehe Ausgabe:

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

Methode 2: (Patch verwenden cp)

Oder laden Sie die GNU herunter coreutilsund patchen Sie sie.

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

Lauf:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

Kopieren Sie die beiden Dateien cpund mvverschieben Sie sie coreutils-8.21/src/nach /usr/local/bin:

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

Oder kopieren Sie es mit Ihrem Dateimanager als root

Fügen Sie die folgenden Zeilen zu Ihrem hinzu ~/.bashrc:

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

Abmelden und Anmelden

Der Fortschrittsbalken kann ohne das vom Autor empfohlene –goder angezeigt werden–progress-bar

Siehe Ausgabe:

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 %

Quelle: linuxhelp


1
Dies sieht aus wie die wahre Quelle des cpPatches: web.archive.org/web/20131115171331/http://beatex.org/web/…
Kaushal Modi

1
+1 für den Hinweis auf progressBefehl
Peter

Dies ist die einzig wahre Antwort
Alessio

14

Bemerkt, dass dieser Beitrag etwas alt war. Aber als ich eine Lösung für das vorliegende Problem fand, dachte ich, ich würde meine Lösung veröffentlichen.

Szenario: Wir haben eine sehr große Verzeichnisstruktur, die wir kopieren möchten. Deshalb geben wir den Befehl cp -R sourcedir destdir in einem Terminalfenster aus.

Öffnen Sie ein anderes Terminalfenster oder schieben Sie den Prozess in den Hintergrund (Ctrl+Z,bg<CR>), und lassen Sie uns einen Fortschrittsindikator wie im Ghetto erstellen:

Wir erhalten zuerst die Gesamtgröße der Verzeichnisstruktur, die wir kopieren möchten. Dies tun Sie mit:

du -sh /path/sourcedirectory/

Konvertieren Sie das Ergebnis in Gigabyte (G) und ersetzen Sie das Ergebnis in der Variablen sourcesize durch das n. Führen Sie den folgenden Befehl aus, nachdem Sie sourceize und destdir (Zielverzeichnis) eingefügt haben.

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

Dadurch wird der Fortschritt alle 10 Sekunden mit folgenden Meldungen gedruckt:

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

Ich bin mir bewusst, dass diese Lösung nicht die Geschwindigkeit des Kopierens ansprach, aber es wäre möglich, dies hinzuzufügen, indem Sie die obigen Befehle erweitern und sie möglicherweise in ein Bash-Skript umwandeln, damit sie leichter zu lesen sind. Zum Beispiel durch Überprüfen, wie viele Daten kopiert werden. In Zeiteinheiten sollte die Geschwindigkeit für die Berechnung und Anzeige trivial sein.


Dies ist eigentlich perfekt für meinen Anwendungsfall, also danke, dass du es gepostet hast! Ich möchte über den Fortschritt des Kopierens eines riesigen Verzeichnisses mit Tausenden von Dateien und nicht nur einer Datei informiert werden. Die anderen Lösungen helfen mir also nicht wirklich.
Ibrahim

Dies ist großartig, insbesondere in Fällen wie dem, in dem ich gerade bin: Remote hat einen riesigen MV-Job gestartet, um Terrabytes an Backups von einem Speicherpool in einen anderen zu verschieben, ohne vorher über die Auswirkungen nachdenken zu müssen. Jetzt kann ich den Prozess einfach im Hintergrund betrachten und einen Blick darauf werfen. Genial!
Riley

8

Um die Antwort von Marco zu verbessern, habe ich heute diese Version von geschrieben cpstat, damit Sie viele Verzeichnisse kopieren und den letzten Parameter als Zielpfad verwenden können. Beachten Sie, dass Sie dank der Verwendung eines relativ tiefen Pfads als Quelle tarautomatisch denselben abhängigen Verzeichnisbaum erstellen können.

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 - )

;}



5

Auch wenn rsyncSie einige Fortschrittsstatistiken erhalten, sollten Sie diese verwenden, wenn Sie eine Fortschrittsanzeige wünschen pv.

Sie können cpveinen Wrapper pvmit einer einfacheren Syntax verwenden, der cpdemjenigen ähnelt, mit dem Sie Verzeichnisse rekursiv kopieren können

Bildbeschreibung hier eingeben

Sie können es hier bekommen


+1 für den Hinweis auf pv. Nizza zu finden!
Peter

4

Die Verwendung eines Tools wie mc(Mitternachtskommandant) kann eine gute Alternative zu anderen Antworten sein.

Es ist ein einfacher Dateimanager, der Ihnen den Fortschritt beim Kopieren / Verschieben anzeigt.



4

Eine andere einfache Lösung besteht darin , den Ausgabeordner wie folgt zu überwachen :

Linux / Cygwin: watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

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

Dieses praktische Dienstprogramm wird ausgeführt duund zeigt die Unterschiede auf.

Eine andere mögliche Lösung wäre, ein einfaches Skript zu schreiben, das Schleifen durchführt, dueine grobe Schätzung des Durchsatzes aufruft und ausgibt.


3

Bei diesem Tool handelt es sich um ein Linux-Dienstprogramm, das nach Coreutils-Grundbefehlen (cp, mv, dd, tar, gzip / gunzip, cat usw.) sucht und den Prozentsatz der kopierten Daten anzeigt:

https://github.com/Xfennec/cv


1
Dies wurde bereits im November '14 von @AmrMostafa vorgeschlagen.
Dubu

2

Ich hatte gerade einen Fall, in dem cp aufgrund eines FUSE-Fehlers im empfangenden Dateisystem mehr oder weniger blockiert war.

Wenn Sie nicht einfach von cp wechseln können (dh weil --sparse = always) und etwas wollen, das für den Fortschritt tatsächlich zuverlässig ist, gehen Sie über / proc.

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 - Kopieren von Dateien in eine Curses-Oberfläche (Fortschrittsbalken unter Linux anzeigen).

BESCHREIBUNG : vcp kopiert Dateien und Verzeichnisse in einer Curses-Oberfläche, wobei nur Textausgaben verfügbar sind. Die Optionen und die Ausgabe ähneln denen von BSD, es wurden jedoch einige neue Funktionen hinzugefügt.

Es bietet Informationen zu:

  • Dateien kopiert und zum Kopieren gelassen
  • geschriebene Daten und Gesamtdatengröße
  • Daten werden jede Sekunde geschrieben
  • Zwei Statusleisten, eine mit aktuellem Dateistatus, die andere mit Gesamtstatus (außer bei 1 Datei, beide mit aktuellem Status) und Prozent

Wenn die Ausgabe an die Konsole gesendet wird:

  • eine Statusleiste
  • Größe kopiert und Geschwindigkeit

VCP-Manpage: https://linux.die.net/man/1/vcp

Laden Sie vcp-2.2.tar.gz herunter von:

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

Abhängigkeit: curses.h (libncurses-dev).

Installieren Sie unter Ubuntu:

sudo apt-get install libncurses-dev

oder

sudo apt-get install libncurses5-dev

INSTALL VCP:

make && make install

Handbuch:

man vcp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.