it-swarm.com.de

Wie wird der Übertragungsfortschritt und die Übertragungsgeschwindigkeit beim Kopieren von Dateien mit cp angezeigt?

Gibt es sonst ein alternatives Befehlszeilendienstprogramm, mit dem dies erreicht werden kann?

326
Olivier Lalonde

Während cp nicht über diese Funktionalität verfügt, können Sie pv verwenden, um dies zu tun:

pv my_big_file > backup/my_big_file

Hinweis: Bei dieser Methode gehen die Berechtigungen und der Besitz der Datei verloren. Auf diese Weise kopierte Dateien haben die gleichen Berechtigungen, als hätten Sie sie selbst erstellt und gehören Ihnen.

In diesem Beispiel gibt pv die Datei im Grunde genommen nur an stdout * aus, das Sie mit dem Operator > in eine Datei umleiten. Gleichzeitig werden dabei Informationen über den Fortschritt an das Terminal gesendet.

So sieht es aus:

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

Möglicherweise müssen Sie Installieren Sie pv (oder geben Sie Sudo apt-get install pv ein) auf Ihrem System.


*: Das technische Bit

In einem Unix-ähnlichen System gibt es drei wichtige Datenströme: stdout (Standardausgabe), stderr (Standardfehler) und stdin (Standardeingabe). Jedes Programm hat sozusagen alle drei. Der Umleitungsoperator > leitet die Programmausgabe in eine Datei um. Ohne Argumente leitet > die Standardausgabe eines Programms in eine Datei um. cp macht im Grunde nichts schicker als

cat source > destination

(wobei cat gerade eine Datei liest und sie auf stdout druckt). pv ist wie cat, aber wenn Sie den Ausgabestream an eine andere Stelle umleiten, werden stattdessen Fortschrittsinformationen an stdout ausgegeben.

Schauen Sie sich man pv an, um mehr darüber zu erfahren.


Eine weitere Option, als alt textDoR schlägt in diese Antwort vor, stattdessen rsync zu verwenden:

$ 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 Dateiberechtigungen/-eigentümer erhalten, während der Fortschritt angezeigt wird.

249
Stefano Palazzo

Gibt es nicht Siehe hier warum. rsync hat zwar mehr als Sie brauchen, aber einen --progress -Parameter. Der -a behält Berechtigungen usw. bei, und -h ist für den Menschen lesbar.

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

Wenn Sie sehen möchten, ob Ihre Dateien korrekt übertragen werden, können Sie gcp und gcp wie cp verwenden. Standardmäßig wird jedoch ein Fortschrittsbalken angezeigt, damit Sie sehen können, was kopiert wird. Wie das Programm Wiki-Hinweise , gcp hat mehrere nützliche Funktionen wie

  • übertragungsfortschrittsanzeige
  • kontinuierliches Kopieren bei Fehler (zur nächsten Datei springen)
  • protokollierung des Kopierstatus: gcp protokolliert alle Aktionen, damit Sie wissen, welche Dateien erfolgreich kopiert wurden
  • namensmanipulation zur Behebung von Einschränkungen des Zieldateisystems (z. B. Löschen von nicht kompatiblen Zeichen "*" oder "?" auf FAT)

Selbst wenn die Fortschrittsanzeige bei Verwendung des Tools 100% erreicht hat, müssen Sie warten, bis die Eingabeaufforderung Ihres Terminals wieder angezeigt wird, bevor Sie die Datenträger sicher entfernen, damit Sie sicherstellen können, dass der Übertragungsvorgang erfolgreich abgeschlossen wurde.

gcp wird zum Kopieren von Dateien verwendet und verfügt über Optionen wie --preserve, damit verschiedene Attribute und Berechtigungen beibehalten werden können, und --recursive, damit ganze Verzeichnisse kopiert werden können. Weitere Informationen zu den Optionen erhalten Sie durch Eingabe von man gcp oder durch Aufrufen der buntu-Hilfeseiten online . Ein Tutorial ist auch verfügbar auf dieser Seite .

Installieren Sie gcp aus den Repositorys mit

Sudo apt-get install gcp

( Hinweis : In Ubuntu 12.10 lautet 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 kopieren Sie einen Ordner auf Ihr Medium mit

gcp -rv ~/Podcasts /media/Mik2

Beispielausgabe von gcp mit dem Fortschrittsbalken:

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 gibt viele andere Optionen, die in man gcp behandelt werden.

88
user76204

Die Verwendung von cURL für genau diesen Zweck macht mir Spaß. Die Manpage listet das "FILE" -Protokoll als unterstützt auf. Verwenden Sie es also wie jedes andere Protokoll in einer URL:

curl -o destination FILE://source

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

67
mathemagician

Während die Geschwindigkeit nicht angezeigt wird, werden beim Kopieren mehrerer Dateien mit der Option -v unter dem Befehl cp Statusinformationen angezeigt. z.B.

cp -rv old-directory new-directory
27
Ubuntourist

Der Kernel kennt die meisten Daten wie die Geschwindigkeit und oft auch den Prozentsatz. Moderne Kernel stellen dies über ihr/proc-Dateisystem zur Verfügung.

showspeed from https://github.com/jnweiger/showspeed verwendet diese Informationen. Es kann an bereits laufende Programme angehängt werden und regelmäßige Aktualisierungen wie folgt durchführen:

$ 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)
...
20
Jürgen Weigert

In den Repositorys gibt es ein Tool namens progress, mit dem verschiedene Befehle untersucht und deren Fortschrittsinformationen angezeigt werden können.

Installieren Sie es mit dem Befehl

Sudo apt-get install progress

Dieses Tool kann folgendermaßen verwendet werden:

cp bigfile newfile & progress -mp $!

Ausgabe:

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

Während pv lokale cp Tasks verarbeiten kann, kann die Verwendung von dd mit pv sowohl lokale (cp) als auch entfernte (scp) Tasks verarbeiten. Aufgaben.

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

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

Dies kann den Fortschritt anzeigen, aber wenn Sie die prozentualen Informationen möchten,

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

Ersetzen Sie 100M durch die tatsächliche Größe Ihrer Quelldatei.

Hier kommt der Remote-Teil

Während scp kaum den aktuellen Fortschritt anzeigen kann, ist die Verwendung von dd mit pv ein Kinderspiel.

ssh [email protected] dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
12
onemach

Es gibt ein neues Tool mit dem Namen cv, das alle mit einem laufenden Befehl verbundenen Deskriptoren findet und den Fortschritt und die Geschwindigkeit anzeigt: https://github.com/Xfennec/cv

cv -w

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

11
naugtur

dd status=progress

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

_dd if=src of=dst status=progress
_

Das Terminal zeigt eine Zeile des Typs:

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

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

Wie viele sagten, enthält cp diese Funktionalität nicht.

Nur um meine $ 0.02 zu werfen, was ich normalerweise mit trivialen Kopiersituationen mache (d. H. No -R):

  1. Sehen Sie, wie groß die Datei ist und merken Sie sich

  2. Beginnen Sie mit dem Kopieren

  3. Öffnen Sie ein anderes Terminal

  4. Führen Sie watch ls -lh DIR in dem Verzeichnis aus, in dem sich das Ziel befindet

Dadurch kann ich mit minimalem Aufwand über die Größe der Zieldatei auf dem Laufenden bleiben.

Als Alternative für weniger triviale Situationen, z. Wenn Sie Verzeichnisse rekursiv kopieren, können Sie watch du -hs DIR verwenden, um eine Zusammenfassung der DIR-Größe anzuzeigen. Die Berechnung kann jedoch lange dauern und das Kopieren sogar verlangsamen. Verwenden Sie daher möglicherweise das Argument -n INTERVAL, um den Kompromiss zu überprüfen.

pdate: Falls Sie Platzhalter für den Befehl verwenden, der mit watch du verwendet wird, z. watch du -hs backup/*, vergessen Sie nicht zu zitieren:

watch "du -hs backup/*"

andernfalls werden die Platzhalter nur einmal erweitert , wenn die Überwachung gestartet wird , damit du keine neuen Dateien/Unterverzeichnisse ansiehst.

7
Alois Mahdal

Wenn Sie über rsync 3.1 oder höher (rsync --version) verfügen, können Sie kopieren (cp -Rpn), dabei Berechtigungen und Eigentumsrechte beibehalten, Verzeichnisse erneut durchsuchen, "kein Datenverlust" und den Gesamtfortschritt anzeigen (anstatt nur den Fortschritt nach Dateien). Kopierrate und (sehr grobe) geschätzte verbleibende Zeit mit:

Sudo rsync -a --info=progress2 --no-i-r /source /destination

Beachten Sie, dass Sudo nur benötigt wird, wenn es sich um Verzeichnisse/Dateien handelt, die Sie nicht besitzen. Ohne den --no-i-r wird der Prozentsatz möglicherweise zu einem bestimmten Zeitpunkt während des Kopiervorgangs auf einen niedrigeren Wert zurückgesetzt. Möglicherweise wird in späteren Versionen von rsync standardmäßig no-i-r mit info = progress2 verwendet, dies ist jedoch in der aktuellen Version von 3.1.2 nicht der Fall.

Ich habe festgestellt, dass der Prozentsatz und die verbleibende Zeit stark überschätzt werden, wenn in ein Verzeichnis kopiert wird, das bereits Dateien enthält (z. B. wenn Sie normalerweise cp -n "no clobber" verwenden würden).

6
S Lentz

Je nachdem, was Sie tun möchten, ist Midnight Commander (mc) möglicherweise die Antwort. Ich bin überrascht, dass es noch nicht erwähnt wurde.

Tools wie pv oder rsync eignen sich gut, um den Fortschritt der Übertragung einer großen Datei anzuzeigen. Wenn Sie jedoch ganze Verzeichnisse/Bäume kopieren möchten, berechnet mc die Größe und zeigt dann den Fortschritt sehr genau an schön. Außerdem ist es auf den meisten Systemen sofort verfügbar.

3
kralyk

Verwenden Sie ein Shell-Skript:

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}

Das wird so aussehen:

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

Quelle

3
Jan

eine weitere Option zum Beibehalten von Attributen ist (wenn source ein Ordner ist, wird er in destination erstellt).

tar -c source | pv -e -t -p -r | tar -C destination  -x

hoffe, es kann jemandem nützlich sein. Um eine geschätzte Übertragungszeit zu erhalten, kann dies erreicht werden, indem do -s source im Voraus ausgeführt und als -s <size> -Parameter an pv übergeben wird.

1
ciekawy

Überprüfen Sie den Quellcode für progress_bar im unten stehenden Git-Repository

https://github.com/Kiran-Bose/supreme

Probieren Sie auch das benutzerdefinierte Bash-Skriptpaket

Laden Sie die Deb-Datei herunter und installieren Sie sie in einer Debian-basierten Distribution oder laden Sie die Quelldateien herunter, ändern Sie sie und verwenden Sie sie für andere Distributionen

Funktionsübersicht

(1) Öffnen Sie Apps ---- Firefox ---- Rechner ---- Einstellungen

(2) Dateien verwalten ---- Suchen ---- Navigieren ---- Schnellzugriff

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3) Verwalten des Telefons ---- Verschieben/Kopieren vom Telefon ---- Verschieben/Kopieren zum Telefon ---- Synchronisieren von Ordnern

(4) USB verwalten ---- Von USB verschieben/kopieren ---- Auf USB verschieben/kopieren

0
KIRAN B

pv weiß, wie man Dateideskriptoren überwacht, denen eine pid gegeben wurde, egal ob es sich um cp oder etwas anderes handelt

Aus der Dokumentation:

   (Linux only): Watching file descriptor 3 opened by another process 1234:

          pv -d 1234:3

   (Linux only): Watching all file descriptors used by process 1234:

          pv -d 1234

Beispiel:

md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============>                                 ] 29% ETA 0:00:53

$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov:  754MiB 0:00:04 [97,2MiB/s] [======================>                       ] 52% ETA 0:00:07
4:/media/windows/copy.mov:  754MiB 0:00:04 [97,3MiB/s] [     <=>                                                                   ] 
0
alecail

Sie können jedes Programm kopieren. Gleichzeitig können Sie Sudo iotop starten und die tatsächliche Lese-/Schreibgeschwindigkeit der Festplatte sehen, jedoch ohne Fortschritt.

0
McKelvin