it-swarm.com.de

Ist es möglich, die CP-Geschwindigkeit und den Prozentsatz der Kopien zu sehen?

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

272
eez0

rsync hat ein Flag namens progress2 zeigt den Gesamtprozentsatz an:

rsync --info=progress2 source dest
216
eez0

Wenn Sie andere Tools als cp zulassen, ist dies sicherlich möglich. Für eine einzelne Datei können Sie pv verwenden. 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 einschließen. Es ist weniger zu tippen und Sie erhalten eine Semantik, die der von cp nahe kommt. Hier ist eine sehr einfache (und nicht fehlersichere!) Funktion:

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

Beachten Sie, dass einige Versionen von tar die 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, sodass pv eine Schätzung der verbleibenden Zeit liefert.

Eine andere Lösung (wie Frostschutz in einem Kommentar erwähnt) ist die Verwendung von rsync mit dem --progress Möglichkeit:

rsync --progress -a sourceDirectory destinationDirectory
107
Marco

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

ex:

rsync -avh --progress sourceDirectory destinationDirectory
65

Ist es möglich, die CP-Geschwindigkeit und den Prozentsatz der Kopien zu sehen?

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


Methode 1: (benutze progress)

Öffnen Sie ein neues Terminal und geben Sie progress ein. Es zeigt den Fortschritt des Befehls cp und anderer Befehle an, z.

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 progress nicht installiert haben, können Sie es aus dem Repository installieren, beispielsweise im CentOS mit dem folgenden Befehl: yum -y install progress.

Öffnen Sie dann, nachdem Sie den Befehl cp im Hintergrund ausgeführt haben, oder nachdem Sie cp normalerweise ausgeführt haben, ein anderes Terminal. Versuchen Sie also einfach diesen Befehl:

# 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 cp verwenden)

Oder laden Sie das GNU coreutils herunter und patchen Sie es.

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 cp und mv unter 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 Ihrem ~/.bashrc Folgende Zeilen hinzu:

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

Abmelden und Anmelden

Der Fortschrittsbalken kann ohne den vom Autor empfohlenen –g Oder –progress-bar Angezeigt werden

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

31
GAD3R

Wie in anderen Antworten erläutert, bietet cp diese Funktionalität nicht. progress (früher als cv bezeichnet) ist jedoch ein kleines Tool, das bei der Bereitstellung dieser fehlenden Funktion sehr hilfreich ist.

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

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

31
Amr Mostafa

Bemerkte, 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, daher geben wir den Befehl cp -R sourcedir destdir in einem Terminalfenster aus.

Öffnen Sie ein anderes Terminalfenster oder verschieben Sie den Prozess in den Hintergrund (Ctrl+Z,bg<CR>), dann machen wir eine Fortschrittsanzeige im Ghetto:

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

du -sh /path/sourcedirectory/

Konvertieren Sie das Ergebnis in Gigabyte (G) und ersetzen Sie das Ergebnis, das Sie in der Variablen sourceize erhalten haben, durch n. Führen Sie den folgenden Befehl aus, nachdem Sie die Quellgröße und das Zielverzeichnis (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 Kopiergeschwindigkeit berücksichtigt, 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 es leichter zu lesen ist. Zum Beispiel durch Überprüfen, wie viele Daten kopiert werden pr. In der Zeiteinheit sollte die Geschwindigkeit trivial zu berechnen und anzuzeigen sein.

15
NordicViking

Um die Antwort von Marco zu verbessern, habe ich heute diese Version von cpstat geschrieben, damit Sie viele Verzeichnisse kopieren und den letzten Parameter als Zielpfad verwenden können. Beachten Sie, dass Sie, wenn Sie einen relativ tiefen Pfad als Quelle verwenden, dank tar automatisch 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 - )

;}
9
poe84it

Nicht in einer Standardversion von cp .

Sie könnten Hintergrund des CP und der Liste die Größe, während Sie darauf warten, dass cp fertig ist.

Ich benutze dieses Perl , um das Wachstum einer einzelnen Datei zu überwachen, aber es läuft extern zum cp (oder was auch immer ich sonst mache)

6
Matt

Eine andere einfache Lösung besteht darin, einfach watch den Ausgabeordner wie folgt zu verwenden:

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 führt du aus und hebt die Unterschiede hervor.

Eine andere mögliche Lösung wäre, ein einfaches Skript zu schreiben, das Schleifen erstellt, du aufruft und eine grobe Schätzung des Durchsatzes ausgibt.

5

Ich fand das zu verwenden, funktionierte großartig:

Sudo watch lsof -p`pgrep -x cp`

aus einem Kommentar von Mike zu der Frage wie man den Fortschritt beim Ausführen von cp überprüft

5
techbio

dd status=progress

Option hinzugefügt in GNU Coreutils 8.24+ (Ubuntu 16.04):

dd if=src of=dst status=progress

Stdout ist eine regelmäßig aktualisierte Zeile wie:

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

Siehe auch: Wie überwachen Sie den Fortschritt von dd? | Fragen Sie Ubunt

Obwohl rsync Ihnen einige Fortschrittsstatistiken liefert, sollten Sie pv verwenden, wenn Sie einen Fortschrittsbalken wünschen.

Sie können cpv verwenden, einen Wrapper für pv mit einer einfacheren Syntax, die der von cp ähnlicher ist und mit der Sie Verzeichnisse rekursiv kopieren können

(enter image description here

Sie können es bekommen hier

5
nachoparker

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
jseals

Dieses Tool ist ein Linux-Dienstprogrammbefehl, der nach den grundlegenden Befehlen von coreutils (cp, mv, dd, tar, gzip/gunzip, cat usw.) sucht, die derzeit auf Ihrem System ausgeführt werden, und den Prozentsatz der kopierten Daten anzeigt:

https://github.com/Xfennec/cv

3
saidi

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 (d. H. Weil --sparse = immer) 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
2
Florian Heigl

Verwenden Sie rsync. rsync --info=progress2 source dest Erzeugt jedoch den Fehler skipping directory source. Sie müssen eine Option -r Oder -a Oder eine ähnliche Option hinzufügen, um dies zu beheben. Ich empfehle -a Und füge auch --stats Hinzu, um am Ende eine schöne Ausgabezusammenfassung anzuzeigen. Fügen Sie zum Schluss time hinzu, um zu sehen, wie lange der gesamte Prozess gedauert hat.

Tun Sie dies stattdessen:

time rsync -a --info=progress2 --stats source destination 

Mit diesem Befehl habe ich gerade ein 42-GB-Verzeichnis innerhalb eines schnellen SSD-Laufwerks in ~ 2,5 Minuten dupliziert! Unglaublich!

Hier ist die Ausgabe. Beachten Sie, dass die "Echtzeit" -Zeit dieses Laufs 2,798 Sekunden betrug. Das liegt daran, dass ich vergessen habe, time beim ersten Durchlauf zu verwenden, bei dem die Kopie tatsächlich erstellt wurde. So sieht die Ausgabe also aus, wenn in Quelle und Ziel bereits alles gleich ist.

$ time rsync -a --info=progress2 --stats mydir mydir_copy
              0   0%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/289187)   

Number of files: 289,187 (reg: 266,595, dir: 22,580, link: 12)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 0
Total file size: 48,621,942,935 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 2,096,688
File list generation time: 0.017 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 11,036,784
Total bytes received: 24,420

sent 11,036,784 bytes  received 24,420 bytes  4,424,481.60 bytes/sec
total size is 48,621,942,935  speedup is 4,395.72

real    0m2.798s
user    0m1.115s
sys 0m1.935s

AKTUALISIEREN:

So sieht es aus, wenn Sie eine vollständige Kopie eines 48-GB-Ordners erstellen. Es dauerte 3 Minuten 13.408 Sekunden!

$ time rsync -a --info=progress2 --stats mydir mydir_bak
 48,621,942,066  99%  239.88MB/s    0:03:13 (xfr#266595, to-chk=0/289188)   

Number of files: 289,188 (reg: 266,595, dir: 22,581, link: 12)
Number of created files: 289,188 (reg: 266,595, dir: 22,581, link: 12)
Number of deleted files: 0
Number of regular files transferred: 266,595
Total file size: 48,621,942,935 bytes
Total transferred file size: 48,621,942,066 bytes
Literal data: 48,621,942,066 bytes
Matched data: 0 bytes
File list size: 12,515,323
File list generation time: 0.034 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 48,656,219,349
Total bytes received: 5,209,801

sent 48,656,219,349 bytes  received 5,209,801 bytes  251,480,254.01 bytes/sec
total size is 48,621,942,935  speedup is 1.00

real    3m13.408s
user    2m40.937s
sys 1m0.627s

Verbunden:

  1. Detaillierte Beschreibung und Beispiele für viele Möglichkeiten zur Verwendung von rsync, einschließlich Spiegelung (mit Löschen, nicht nur Hinzufügen von Dateien): https: // superuser .com/question/1271882/convert-ntfs-partition-to-ext4-how-to-copy-the-data/1464264 # 1464264
1
Gabriel Staples

VCP - Kopieren Sie Dateien in eine Curses-Oberfläche (Zeigen Sie den Fortschrittsbalken unter Linux an).

BESCHREIBUNG: vcp kopiert Dateien und Verzeichnisse in eine Fluchschnittstelle, wobei nur Textausgabe verfügbar ist. Die Optionen und die Ausgabe ähneln denen von BSD, fügen jedoch einige neue Funktionen hinzu.

Es bietet Informationen zu:

  • dateien kopiert und zum Kopieren belassen
  • geschriebene Daten und Gesamtdatengröße
  • daten werden jede Sekunde geschrieben
  • zwei Statusleisten, eine mit dem aktuellen Dateistatus, die andere mit dem Gesamtstatus (außer bei 1 Datei, beide zeigen den aktuellen Status) und der Prozentsatz

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

INSTALLIEREN vcp:

make && make install

Handbuch:

man vcp
1
user350351