Ich habe bereits nach dieser Option gesucht, aber nur Lösungen gefunden, die benutzerdefinierte Patches beinhalten . Die Tatsache, dass es nicht in --help angezeigt wird und keine weiteren Informationen gefunden werden können, weist wahrscheinlich darauf hin, dass die Antworten "nein" sind, aber ich würde dies gerne bestätigt sehen.
Kann ich mit rsync den gesamten Fortschritt der Dateiübertragung anzeigen?
Antworten:
Danakim ist richtig. Es gibt keine einfachen Möglichkeiten, eine Gesamtfortschrittsanzeige hinzuzufügen.
Der Grund dafür ist, dass rsync beim Anzeigen einer Liste der zu synchronisierenden Dateien nicht im Voraus weiß, welche Dateien geändert werden müssen. Wenn Sie Deltatransfers durchführen, müssen die Deltas selbst im Voraus berechnet werden, um ein Gesamtbild der zu erledigenden Arbeit zu erhalten.
Mit anderen Worten, der einfachste Weg, um zu berechnen, wie viel Arbeit dort zu leisten ist, besteht darin, sie tatsächlich zu erledigen.
quelle
--size-only
oder ähnliches vorauszusagen.Es gibt jetzt eine offizielle Möglichkeit, dies in rsync zu tun (Version 3.1.0, Protokollversion 31, Getestet mit Ubuntu Trusty 14.04).
Ich habe es mit meinem
/usr
Ordner versucht, weil ich diese Funktion zum Übertragen ganzer Dateisysteme haben wollte, und/usr
schien ein gutes repräsentatives Beispiel zu sein.Das
--info=progress2
ergibt einen schönen Gesamtprozentsatz, auch wenn es sich nur um einen Teilwert handelt. In der Tat ist mein/usr
Ordner mehr als 6 Gigs:und
rsync
brauchte viel Zeit, um alles zu scannen. Fast die ganze Zeit war der Prozentsatz, den ich gesehen habe, zu 90% fertig, aber es ist trotzdem beruhigend zu sehen, dass etwas kopiert wird :)Verweise:
quelle
--info=progress2
nicht funktioniert-v
--no-i-r
Schalter hinzu, damitrsync
vor dem Kopieren nicht inkrementell, sondern vollständig gescannt wird und + angezeigt wird, wie viel Arbeit noch übrig ist.--human-readable
(oder-h
) verwenden können, um die aktuelle Gesamtgröße in MB / GB anzuzeigen.Sie können mit 'pv' (
apt-get install pv
mit Debian und Ubuntu). Ich empfehle, die Anzahl der übertragenen Dateien zu überwachen, da die übertragene Datenmenge nicht mit der Größe der Dateien korreliert, sondern im Delta zwischen Quelle und Ziel. Und das Zählen von Dateien zählt den gleichen Fortschritt für ein großes Delta und ein anderes mit kleinem Delta. Dies bedeutet, dass die ETA-Schätzung in jedem Fall weit entfernt sein könnte. Die größenbasierte ETA funktioniert nur, wenn Ihr Ziel leer ist, in diesem Fall Delta == Größe der Quelle.Die allgemeine Idee ist, eine Zeile pro Datei 'übertragen' von rsync auszugeben und diese Zeilen mit 'pv' zu zählen:
Ich neige dazu, ganze Dateisysteme zu sichern (aus verschiedenen Gründen). In diesem Fall können Sie die wesentlich günstigere Version verwenden
df
, um die Anzahl der Dateien zu ermitteln (anstattdu
oder wenn Siefind
Ihre Quellhierarchie ein weiteres Mal durchlaufen, nachdem rsync dies getan hat). Die Option -x wird angezeigt, um sicherzustellen, dass rsync auf demselben Quelldateisystem verbleibt (und nicht anderen internen Bereitstellungen folgt):Wenn Sie Dateien in / source generell zählen möchten, verwenden Sie
find /source|wc -l
(Warnung: Möglicherweise ist die E / A-Verarbeitung langsam und umfangreich).quelle
df -i /source
die Anzahl der Inodes (Dateien) von allen Partitionen abgerufen wird, in denen sich / source befindet. Verwenden Sie andernfalls 'find', um Dateien in einem Verzeichnis innerhalb des Ausdrucks "$ ()" zu zählen.du
oderfind
- sagen wir, Sie beenden eine unvollständige Kopie oder führen einrsync -ai --dry-run
pv
Das Folgende gilt für rsync Version 3.0.0 und höher. Die nachfolgend beschriebenen Optionen wurden in dieser Version am 1. März 2008 eingeführt.
Zusammen mit --info = progress2 können Sie auch die Option --no-inc-recursive (oder den kürzeren --no-ir- Alias) verwenden, um die inkrementelle Rekursion zu deaktivieren.
Dadurch wird die gesamte Dateiliste am Anfang erstellt, anstatt schrittweise mehr Dateien zu ermitteln, während die Übertragung fortgesetzt wird. Da alle Dateien vor dem Start bekannt sind, wird ein besserer Bericht über den Gesamtfortschritt erstellt. Dies gilt für die Anzahl der Dateien - es werden keine Fortschritte aufgrund der Dateigröße gemeldet.
Dies beinhaltet einen Kompromiss. Das Erstellen der gesamten Dateiliste im Voraus ist speicherintensiver und kann den Start der eigentlichen Übertragung erheblich verzögern. Je mehr Dateien vorhanden sind, desto länger dauert die Verzögerung und desto mehr Speicher wird benötigt.
Folgendes stammt aus dem rsync-Handbuch (Quelle: http://rsync.samba.org/ftp/rsync/rsync.html ):
Unter https://rsync.samba.org finden Sie Informationen zu bestimmten Versionsunterschieden.
quelle
Für lange Transfers bin ich glücklich,
du -s
auf beiden Seiten zu laufen . Auchwatch -n1 du -s
wenn ich mich sehr ängstlich fühle.watch
Führt (du -s
hier) periodisch einen Befehl aus ( hier alle 1 Sekunde) und zeigt die Ausgabe im Vollbildmodus an.quelle
watch
Befehls!Grundsätzlich nein. Sie können den Fortschritt nur pro Datei mit dem Flag --progress anzeigen, aber das ist es auch schon.
Ich vermute, Sie können einen Wrapper darum schreiben oder einen der Patches verwenden, die Sie bereits gefunden haben, aber Sie müssen sich fragen, ob es sich wirklich lohnt. Brauchen Sie tatsächlich einen vollständigen Fortschritt für rsync?
quelle
--progress
Arbeit mit--info=progress2
, es werden Sie den globalen Fortschritt zeigen. Sie müssen den inkrementellen rekursiven Algorithmus deaktivieren für sie nützlich zu sein, so--info=progress2 --no-inc-recursive
Ich habe die Antwort von zerodeux verwendet und mein eigenes kleines Bash-Skript geschrieben:
quelle
Ich habe auch gesucht, wie der Gesamtfortschritt mit rsync angezeigt werden kann, und ich habe in diesem Beitrag einen nützlichen Antwortenden gefunden: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
Grundsätzlich können Sie --info = progress2 in der Entwicklungsversion von rsync 3.1.0 verwenden . Folgendes hat der Arzt gesagt:
quelle
--info=name0
is gold 🌈👑Ich habe die Antwort von zerodeux verwendet und mein eigenes kleines BASH-Skript geschrieben:
Ich habe den TODO-Probelauf auf geändert
Es findet die Anzahl der Dateien sehr schnell!
quelle
find
funktioniert nur, wenn Sie vorrsync
Ort sind.rsync --dry-run
funktioniert auch mit entfernten Quellen ...Wenn Sie nicht über die neueste Version von rsync verfügen (z. B. OS X 2.6.9) und diese nicht verwenden können
--info=progress2
, können Sie sich anhand der folgenden Alternative vor laufendem Bildlauf schützen :rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Damit wird in einer Zeile der Name der zuletzt übertragenen Datei ausgedruckt:
Transferring: the-latest.file
quelle
Verwenden
Um zu sehen, welche Dateien rsync aktuell geöffnet hat (wird die Dateigröße anzeigen), kopiert rsync lokal in eine versteckte Datei
quelle
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
aber Ihre Lösung ist einfacher.Ich würde das kommentieren, habe aber nicht genug Reputation. Als Antwort auf den Kommentar von naught101 zur ausgewählten Antwort zeigt die Option --progress an, wie viele Dateien von der zu übertragenden Gesamtmenge übertragen wurden. Ich habe das erst bemerkt, als ich mir diesen Beitrag angesehen und die Ausgabe genauer untersucht habe.
Der Status "zu prüfen" zeigt an, wie viele Dateien von der Gesamtsumme übrig bleiben. Dies ist am nützlichsten, wenn Sie eine Synchronisierung mit einem neuen Ziel durchführen, damit Sie wissen, dass alle Dateien vollständig kopiert werden.
Von der Manpage:
quelle
Beachten Sie hierbei, dass sogar --info = progress2 nicht ganz zuverlässig ist, da dieser Prozentsatz auf der Anzahl der Dateien basiert, die rsync zum Zeitpunkt der Anzeige des Fortschritts "kennt". Dies ist nicht unbedingt die Gesamtzahl der Dateien, die synchronisiert werden mussten (wenn beispielsweise eine große Anzahl großer Dateien in einem tief verschachtelten Verzeichnis erkannt wird). Eine Möglichkeit, um sicherzustellen, dass --info = progress2 in der Fortschrittsanzeige nicht "zurückspringt", besteht darin, rsync zu zwingen, alle Verzeichnisse rekursiv zu durchsuchen, bevor die Synchronisierung gestartet wird (anstatt standardmäßig einen inkrementellen rekursiven Scan durchzuführen). indem Sie auch die Option --no-inc-recursive angeben. Beachten Sie jedoch, dass diese Option auch die Speichernutzung und die Laufzeit von rsync erhöht.
quelle
--no-inc-recursive
Option oder ihres kürzeren--no-i-r
Alias deaktiviert werden . (Siehe andere Antwort)Ich verwende ein Skript, das die Informationen aus / proc // io für den rsync-Prozess (oder einen anderen Prozess in diesem Fall) extrahiert. Wenn ich weiß, dass der Gesamtbetrag übertragen werden muss, wird der Fortschritt berechnet.
quelle
Wenn Ihre Version von
rsync
die--info=progress2
Option nicht akzeptiert , können Sie Folgendes verwendentqdm
:Installieren:
Benutzen:
quelle
Vielleicht können Sie
pv
mit rsync kombinieren . Vor allem der Parameter--size
könnte hilfreich sein. Wenn Sie sich die Dokumente ansehen, sollte so etwaspv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
funktionieren.Hier finden Sie die Dokumentation und Software.
Habe ich nicht alleine ausprobiert.
quelle
Könnte ein bisschen zu spät sein, aber zukünftige Antwortsuchende könnten davon profitieren.
Das nervte mich auch, also dachte ich, ich würde runter und schmutzig werden und mein erstes Drehbuch schreiben. Das Paket zenity muss installiert sein (sudo apt-get install zenity), aber ich bin mir sicher, dass es wahrscheinlich schon dort sein wird. Außerdem verwende ich wmctrl (Fenster-Manager-Steuerung), um den Titel des Fortschrittsdialogs zu ändern, wenn er fertig ist. Er ist leicht zu installieren, macht aber keinen Unterschied, wenn Sie es nicht tun. Ich möchte nur sehen, wann es in meinem Panel fertig ist.
Das Skript fragt grundsätzlich nach einem Quell- und Zielverzeichnis, berechnet mit du den Prozentsatz des Ziels über der Quellgröße und zeigt einen Fortschrittsbalken an.
Hinweis: Dies funktioniert nur für die vollständige Verzeichnis- / Dateisynchronisierung (ich verwende es normalerweise, um Backups von apt cache zu erstellen). Daher gibt es keine Option --exclude = / file / in / Source-directory. Funktioniert auch nicht, wenn sich Dateien / Verzeichnisse im Zielverzeichnis befinden, die sich nicht im Quellverzeichnis befinden. Ich bin mir nicht sicher, ob es für entfernte Quellen / Ziele funktioniert, da ich nie die Notwendigkeit oder die Ressourcen hatte, es zu testen.
PS. Dieses Skript ist möglicherweise sehr schlecht geschrieben oder sehr ineffizient (Skript-Jungfrau hier), aber es erfüllt zumindest seinen Zweck und natürlich können Sie es gerne bearbeiten und verbessern, um es Ihren Bedürfnissen anzupassen. PSS. Außerdem konnte ich die Abbrechen-Schaltfläche nicht zum Beenden von rsync verwenden, sodass ich sie gerade entfernt habe.
quelle