Ist es möglich, den Fortschritt der Ausführung des CP-Prozesses zu überprüfen? Einige Prozesse reagieren auf verschiedene KILL-Signale, sodass Sie ihren Status überprüfen können. Ich weiß, dass ich cp mit dem Parameter -v ausführen kann, aber wenn ich das vergesse, läuft cp sehr lange und ich möchte wissen, welche Datei kopiert wird oder wie viele bereits kopiert wurden.
54
while sleep 1 ; do sync ; done
.Antworten:
Ja, indem Sie stat für die Zieldatei und die lokale Datei ausführen und eine Dateigröße erhalten,
dh
stat -c "%s" /bin/ls
Und Sie erhalten den Prozentsatz der kopierten Daten, indem Sie die beiden Werte vergleichen
In einer sehr einfachen Implementierung sieht das so aus:
quelle
In neueren Versionen von Mac OS X können Sie einfach CTRL+ drücken T, um den Fortschritt zu sehen. Aus der OSX 10.6-Manpage für cp (1) :
Das Drücken von CTRL+ Tentspricht dem Signalisieren des aktuellen Prozesses mit SIGINFO auf BSD-basierten Maschinen, einschließlich OSX.
Dies funktioniert auch für dd (1) .
Ich glaube nicht, dass Linux über diesen SIGINFO-Mechanismus verfügt, und in der GNU-Manpage für cp (1) finden Sie keine Informationen zu Signalen, mit denen der Fortschritt gemeldet werden kann.
quelle
mv
am Leben bin . Vielen Dank!Wenn Sie viele Dateien kopieren
du -s /path/to/destination
oderfind /path/to/destination | wc -l
eine Vorstellung davon haben, wie viel bereits getan wurde.Sie können herausfinden, welche Datei kopiert wird,
lsof -p1234
wobei 1234 die Prozess-ID von istcp
. Meldet unter vielen Systemenpgrep -x cp
die Prozess-IDs aller ausgeführten Prozesse mit dem Namencp
. Dies ist möglicherweise nicht sehr nützlich, da die Reihenfolge, in der die Dateien in einem bestimmten Verzeichnis kopiert werden, im Wesentlichen unvorhersehbar ist (in einem großen Verzeichnis unter Linuxls --sort=none
wird dies angezeigt ; versuchen Sie es mit einem Verzeichnisbaumfind
).lsof -p1234
gibt außerdem an, wie viele Bytescp
für die aktuelle Datei bereits in derOFFSET
Spalte gelesen und geschrieben wurden .Unter Linux gibt es IO-Nutzungsstatistiken in
/proc/$pid/io
(verwenden Sie wieder die PID descp
Prozesses für$pidf
). Derrchar
Wert ist die Gesamtzahl der Bytes, die der Prozess gelesen hat, undwchar
die Anzahl der Bytes, die der Prozess geschrieben hat. Dies umfasst nicht nur Daten in Dateien, sondern auch Metadaten in Verzeichnissen. Sie können diese Zahl mit der ungefähren Zahl vergleichen, die mitdu /path/to/source
(die nur Dateidaten zählt) erhalten wird.read_bytes
undwrite_bytes
nur das einschließen, was aus dem Speicher gelesen oder geschrieben wurde, dh Terminaldiagnose und Daten, die sich bereits im Cache oder noch in Puffern befinden, werden ausgeschlossen.quelle
watch lsof -p1234
watch lsof -p`pgrep -x cp`
Ein relativ neues Tool, das genau das macht, ist progress (ehemals cv [coreutils viewer]).
Was ist es?
Wie funktioniert es?
quelle
Einer meiner Lieblingstricks (unter Linux) ist es, die PID des
cp
Prozesses herauszufinden (mithilfe vonps | grep cp
oder ähnlichem) und dann in/proc/$PID/fd/
und zu suchen/proc/$PID/fdinfo/
.Dies zeigt Ihnen, welche Dateien der Prozess geöffnet hat. Wenn Sie sehen möchten, wie weit der Prozess in der Datei ist ...
Der
pos
Parameter ist die Position des Lese- (oder Schreib-) Zeigers in Byte.quelle
Sie können einige Dinge tun. Sie können es anhängen,
strace
um zu sehen, was es tut (die Ausgabe kann reichlich sein!):oder Sie könnten Ihnen
lsof
sagen, welche Dateien gerade geöffnet sind:Wenn Sie eine große rekursive Methode ausführen
cp
, können Siepwdx
das aktuelle Arbeitsverzeichnis abrufen, um eine Vorstellung davon zu erhalten, wie es funktioniert:quelle
Während das OP speziell die Möglichkeit erwähnt hat, den Fortschritt des "cp" -Befehls zu verfolgen, muss gesagt werden, dass andere Dienstprogramme für dieses spezielle Problem besser geeignet sind.
Zum Beispiel:
zeigt den Fortschritt des Kopierens der FROM-Datei / des Ordners in die TO-Datei / den FOLDER an.
Und rsync teilt Ihnen mit, wie viel kopiert wurde (und mit welcher Übertragungsrate). Es funktioniert für einzelne Dateien oder Ordner auf demselben Computer oder über das Netzwerk.
quelle
rsync
.Sie können die Dateien am Zielort überprüfen.
Wenn Ihr cp-Befehl so ähnlich ist,
cp -a <my_source> <my_dest_folder>
würde ich prüfen, welche Dateien bereits kopiert wurden<my_dest_folder>
und in welcher Dateigröße, damit ich den Fortschritt sehen kann. Wenn das<my_source>
etwas komplex ist (mehrere Verzeichnisebenen), kann ein kleines Skript den Status überprüfen. Obwohl ein solches Skript ein wenig E / A verbrauchen könnte, würde es dann nicht vomcp
Prozess verwendet.quelle
Bei diesem Tool handelt es sich um ein Linux-Dienstprogramm, das nach Coreutils-Grundbefehlen sucht (cp, mv, dd, tar, gzip / gunzip, cat usw.), die derzeit auf Ihrem System ausgeführt werden, und den Prozentsatz der kopierten Daten anzeigt:
https://github.com/Xfennec/cv
quelle
Ich möchte hinzufügen
cpv
, ein kleiner Wrapper für daspv
, was ich geschrieben habe, der die Verwendung von imitiertcp
.Einfach und nützlich
Sie können es hier bekommen
quelle
Sie können auch den Pipeviewer verwenden .
quelle
Verwendung
pv -d
:( Quelle )
Finden Sie die PID Ihres running
cp
(pidof cp
) heraus, sagen wir, es ist 12345; dann einfachAnmerkungen:
pv
das Programm als derselbe Benutzer aus, der es ausführtcp
(oder als root).cp
gerade kleine Dateien verarbeitet werden, werden wahrscheinlich nicht alle in der Ausgabe angezeigt (eine kleine Datei wird möglicherweise zu schnell geschlossenpv
, um sie abholen zu können). Dennoch werden einige auftauchen, so dass Sie selbst dann in der Lage sein werden, zu sagen, wascp
tut.pv -d "$(pidof cp)"
könnte funktionieren; aber wenn es mehr als eincp
laufendes gibt, arbeitet es nicht. Espidof -s
gibt höchstens eine PID, aber Sie können nicht sicher sein, ob sie zum richtigencp
Prozess gehört, wenn es viele gibt.quelle
Sie können ein Signal an den Prozess senden:
Es ist noch nützlicher, ein Skript zu erstellen, das so lange abruft, bis Sie Strg-C drücken oder der Vorgang abgeschlossen ist:
Funktioniert für dd. Funktioniert nicht für CP . Möglicherweise müssen Sie ein anderes Signal verwenden. Ich habe SIGINFO einmal ausprobiert, aber es scheint auf der Intel-Plattform nicht mehr zu existieren.
quelle