Andernfalls gibt es ein alternatives Befehlszeilendienstprogramm, mit dem dies erreicht werden kann?
Andernfalls gibt es ein alternatives Befehlszeilendienstprogramm, mit dem dies erreicht werden kann?
Antworten:
Während cp
hat diese Funktionalität nicht erhalten haben, können Sie verwenden , um pv
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 wird pv
die Datei im Grunde nur an stdout * ausgegeben, das Sie mit dem >
Operator in eine Datei umleiten . Gleichzeitig werden dabei Informationen über den Fortschritt an das Terminal gesendet.
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 pvsudo apt-get install pv
auf Ihrem System installieren (alternativ eingeben ).
*: 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. Wie Sie oben sehen, wird >
die Standardausgabe eines Programms ohne Argumente in eine Datei umgeleitet . cp
Im Grunde nichts schicker als
cat source > destination
(Wo cat
liest gerade eine Datei und druckt es auf stdout). pv
ist wie cat, aber wenn Sie den Ausgabestream an eine andere Stelle umleiten, werden stattdessen Fortschrittsinformationen an stdout ausgegeben.
Schauen Sie sich um man pv
, um mehr darüber zu erfahren.
Eine andere Möglichkeit, wie DoR in dieser Antwort vorschlägt , besteht darin, 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.
alias cp="rsync -avz"
cp ist veraltet.
pv
, kannst du einschnüffeln /proc/PID of cp/fd
und /proc/PID of cp/fdinfo
den Fortschritt herausfinden. (Es liegt an Ihnen, die Geschwindigkeit abzuleiten.) Ich benutze diese Technik, um zu beobachten updatedb
.
-z
sollte wahrscheinlich nur für Netzwerkkopien verwendet werden. Das Komprimieren und Dekomprimieren der Daten für eine lokale Kopie ist ein reiner Aufwand.
rsync
, achten Sie darauf, dass Sie dem Quellpfad kein Trailing hinzufügen /
(oder es entfernen, wenn zB die Bash-Vervollständigung es automatisch dort ablegt). Andernfalls erhalten Sie andere Ergebnisse als bei Verwendung von cp
(oder gcp
).
Gibt es nicht Sehen Sie hier , warum. Obwohl es mehr tut, als Sie brauchen, rsync
hat es einen --progress
Parameter. Sie -a
behalten Berechtigungen usw. und -h
sind 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)
-r
Flag zum Wiederverwenden von Verzeichnissen. Es kann sogar als direkter Ersatz für cp alias cp="rsync -ah --progress"
--progress
dreht sich mein Kopf - ich beobachte die gesamte Ausgabe im Terminal. Diejenigen, die hier von der AOL-Schlüsselwortsuche kommen, rsync -ah --info=progress2 [source] [destination]
präsentieren die Ausgabe meiner Meinung nach ein wenig vernünftiger.
Wenn Sie sehen möchten, ob Ihre Dateien übertragen korrekt könnten Sie gcp
und gcp
ist wie cp aber standardmäßig gibt Ihnen einen Fortschrittsbalken , so dass Sie sehen können , was kopiert wird. Wie das Programm im Wiki mitteilt , gcp
verfügt es über mehrere nützliche Funktionen wie z
- Ü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 der Fortschrittsbalken bei Verwendung des Tools 100% erreicht hat, müssen Sie warten, bis die Eingabeaufforderung Ihres Terminals erneut angezeigt wird, bevor Sie Ihre Medien 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, mit --preserve
denen verschiedene Attribute und Berechtigungen beibehalten und --recursive
ganze Verzeichnisse kopiert werden können. Weitere Informationen zu den Optionen erhalten Sie, indem Sie man gcp
die Online-Hilfeseiten von Ubuntu aufrufen oder diese aufrufen . Ein Tutorial ist auch auf dieser Site verfügbar .
Installieren Sie gcp
aus den Repositories mit
sudo apt-get install gcp
( Hinweis : In Ubuntu 12.10 ist der neue Automount-Punkt beispielsweise /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 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 behandelt werden man gcp
.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
vor dem Starten von gcp einstellen. Wenn die Maschine kopflos ist, müssen Sie eine xsession in einem virtuellen Framebuffer starten oder so, an diesem Punkt sollten Sie wahrscheinlich nur nach einem anderen Programm suchen
gcp
ist ziemlich anständig, aber die DBUS / X-Anforderung ist ungerade. Ich habe das über SSH erledigt, indem ich ssh forwarding verwendet habe: ssh -X user@host
und das erlaubte mir, es auszuführen.
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.
pv
, dass es Berechtigungen nicht retten wird.
Während die Geschwindigkeit nicht angezeigt wird, werden beim Kopieren mehrerer Dateien über die -v
Option zum cp
Befehl Statusinformationen angezeigt . z.B
cp -rv old-directory new-directory
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 von 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)
...
pkill -USR1 dd
, um dd
dessen Status anzuzeigen. Eine andere Option besteht watch -n 1 pkill -USR1 dd
darin, den Fortschritt regelmäßig (jede Sekunde) anzuzeigen.
progress
In den Repositorys gibt es ein Tool, mit dem verschiedene Befehle überprüft 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
mit lokalen umgehen cp
Aufgaben, mit dd
mit pv
mit lokalen umgehen kann ( cp
) und Remote ( scp
) Aufgaben.
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Bitte stellen Sie die path/to/dest.mkv
Ausgänge durchtouch path/to/dest.mkv
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
oben durch die tatsächliche Größe Ihrer Quelldatei.
Während der scp
aktuelle Fortschritt kaum zu erkennen ist, ist die Verwendung von dd
with pv
ein Kinderspiel.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Es gibt ein neues Tool namens "cv", mit dem Sie alle Deskriptoren finden können, die sich auf einen ausgeführten Befehl beziehen und den Fortschritt und die Geschwindigkeit anzeigen können: https://github.com/Xfennec/cv
cv -w
gibt die Statistiken für alle laufenden Operationen cp, mv usw. aus
watch cv -q
ist noch ordentlicher
cp
ein Verzeichnis rekursiv kopiert wird oder nicht.
Wie viele sagten, enthält cp diese Funktionalität nicht.
Nur um meine $ 0.02 zu werfen, was ich normalerweise mit trivialen Kopiersituationen mache (dh nein -R
):
Sehen Sie, wie groß die Datei ist und merken Sie sich
Beginnen Sie mit dem Kopieren
Öffnen Sie ein anderes Terminal
Führen Sie watch ls -lh DIR
das 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. B. das rekursive Kopieren von Verzeichnissen, können Sie eine watch du -hs DIR
Zusammenfassung der DIR-Größe anzeigen. Die Berechnung kann jedoch sehr lange dauern und das Kopieren sogar verlangsamen. Verwenden Sie daher möglicherweise -n INTERVAL
Argumente, um zu überwachen, dass ein Kompromiss akzeptabel ist.
Update: Wenn Sie Platzhalter mit dem Befehl watch du verwenden, watch du -hs backup/*
vergessen Sie zB nicht, Folgendes anzugeben:
watch "du -hs backup/*"
Andernfalls werden die Platzhalter nur einmal erweitert , wenn die Überwachung gestartet wird, sodass keine neuen Dateien / Unterverzeichnisse angezeigt werden.
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 können Sie den Fortschritt von dd überwachen?
Wenn Sie über rsync 3.1 oder höher ( rsync --version
) verfügen , können Sie kopieren (cp -Rpn), während die Berechtigungen und der Besitz erhalten bleiben, Verzeichnisse wiederverwenden, "kein Datenverlust" und den Gesamtfortschritt (anstatt nur den Fortschritt nach Datei), die Kopierrate und ( sehr grob) geschätzte verbleibende Zeit mit:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Beachten Sie, dass sudo nur benötigt wird, wenn Sie sich mit Verzeichnissen / Dateien befassen, die Sie nicht besitzen. Ohne das --no-i-r
Symbol wird der Prozentsatz möglicherweise während des Kopiervorgangs auf einen niedrigeren Wert zurückgesetzt. Möglicherweise wird in späteren Versionen von rsync standardmäßig no-ir 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).
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% [===============================> ]
Je nachdem, was Sie tun möchten, könnte Midnight Commander ( mc
) die Antwort sein. 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, aber wenn es darum geht, ganze Verzeichnisse / Bäume zu kopieren, mc
berechnet sie die Größe und zeigt dann den Fortschritt sehr gut an. Außerdem ist es auf den meisten Systemen sofort verfügbar.
Eine weitere Option zum Beibehalten von Attributen könnte sein (wenn source
es sich um einen Ordner handelt, in dem er erstellt wird destination
).
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 dies do -s source
im Voraus durchgeführt und als -s <size>
Parameter an übergeben wird pv
.
-f -
ist überflüssig. tar
Die Standardausgabe für c
und die Standardeingabe für x
sind stdout und stdin.
Überprüfen Sie den Quellcode für progress_bar im folgenden Git-Repository
https://github.com/Kiran-Bose/supreme
Probieren Sie auch das Custom Bash Script Package Supreme aus
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
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] [ <=> ]
pv
es behandelt Berechtigungen nicht so wiecp
... (basierend auf einem kurzen Test, den ich ausprobiert habe:pv
habe das Ausführungsbit nicht über ... kopiertrsync
.