Gibt es beim Verschieben großer Verzeichnisse mv
eine Möglichkeit, den Fortschritt (%) anzuzeigen? Der cp
Befehl auf gentoo hatte einen -g
Schalter, der den Fortschritt anzeigt .
command-line
mv
progress-information
letronje
quelle
quelle
Antworten:
Sie können ein gepatchtes cp und mv erstellen, die dann beide die Option -g unterstützen, um den Fortschritt anzuzeigen. Auf dieser Seite finden Sie Anweisungen und Patches . Allerdings : Die Seite fordert Sie dazu auf
das überschreibt die ursprünglichen cp und mv. Dies hat zwei Nachteile: Erstens, wenn ein aktualisiertes Coreutils-Paket auf Ihrem System ankommt, werden sie überschrieben. Zweitens, wenn die gepatchte Version ein Problem hat, können sie Skripte unterbrechen, die auf Standard-CP und -MV basieren. Ich würde lieber so etwas machen:
Dadurch werden die Dateien nach / usr / local / bin kopiert, das für vom Benutzer kompilierte Programme vorgesehen ist, und ihnen wird ein anderer Name gegeben. Wenn Sie also einen Fortschrittsbalken wünschen, sagen Sie
mvg -g bigfile /mnt/backup
mv und verwenden es normal.Außerdem kannst du
alias mvg="/usr/local/mvg -g"
dann nur noch sagenmvg bigfile /mnt/backup
und direkt den Fortschrittsbalken bekommen.quelle
Ich mag die Idee nicht, Binärdateien von coreutil zu überschreiben, wenn es einfachere Lösungen gibt, also hier meine:
rsync : Rsync kopiert Dateien und hat einen
-P
Schalter für einen Fortschrittsbalken. Wenn Sie also rsync installiert haben, können Sie einen einfachen Alias in Ihrer Shells-Dot-Datei verwenden:Der Nachteil ist, dass rsync etwas langsamer ist als cp, aber Sie sollten dies mit der Zeit messen und selbst entscheiden, ich kann damit leben :-)
Shell-Skript : Ein Shell-Skript kann auch den Fortschrittsbalken erstellen. Ich habe das vor einiger Zeit im Internet gefunden und erinnere mich nicht an die Quelle:
Das wird so aussehen:
bar :
bar
ist ein kleines Shell-Skript zum Anzeigen einer Prozessleiste für alle Arten von Vorgängen (cp, tar usw.). Beispiele finden Sie auf der Projekthomepage.Es ist auch für die Bourne-Shell geschrieben, damit es überall in der Nähe läuft.
quelle
bar
wickeltmv
noch nicht einrsync
dies nichtmv
vollständig ersetzt (das OP fragt nach), insbesondere wenn es um schnelle Kopien auf Copy-on-Write-Dateisystemen wie gehtbtrfs
.Es gibt ein neues Tool mit dem Namen
progress
, mit dem jeder Deskriptor gefunden werden kann, der sich auf einen laufenden Befehl bezieht, und das den Fortschritt und die Geschwindigkeit anzeigt: hier verfügbargibt die Statistiken für alle laufenden Operationen cp, mv usw. aus
quelle
progress
nach der Installation einfach getippt und es hat mir den Fortschritt für denmv
Befehl angezeigt, auf den ich gerade gewartet habe. Vielen Dank!sudo
denselben Benutzer verwenden (denke ich) - Sie können auch verwendenwatch
, um alle 2 Sekunden zu sagen, was passiert:watch progress -w
watch progress -w
kannst du auch einfachprogress -m
Sie können den Befehl pipe viewer verwenden
pv
, um den Fortschrittsbalken anzuzeigen:Ich benutze dies oft, um eine große Datei über ein bereitgestelltes Netzwerkdateisystem zu kopieren (mit
gzip
und kombinierentar
). Der Nachteil ist, dass Sie nur eine Datei und kein Verzeichnis kopieren können . Und Sie müssen der neuen Datei einen Namen geben, Sie können nicht einfach das Zielverzeichnis angeben, wie es dercp
Fall ist. Das Kopieren ist jedoch nichtpv
das Ziel. Es ist ein leistungsfähiges Werkzeug und kann viel mehr als nur Dateien kopieren. Weitere Beispiele finden Sie auf der Homepage vonpv
.Eine viel bessere Option ist die Verwendung
rsync -aP
. Wenn Siemv
stattdessen möchten , hängen Sie das Flag an--remove-source-files
. Fügen Sie dies hinzu,.bashrc
wenn Sie die Befehle häufig verwenden möchten:Der Nachteil hier ist, dass rsync nur den Fortschritt anzeigt, keine Fortschrittsanzeige.
quelle
tar cf - source-dir | pv | tar xf - -C out-dir
gibt Ihnen den Durchsatz eines ganzen Verzeichnisses. Wenn Sie die Größe kennen und-s
an pv übergeben, können Sie auch Fortschritte erzielen.Wenn es Ihr Ziel ist, ein Verzeichnis mit Fortschrittsanzeige zu verschieben / zu kopieren, aber keine nicht-terminale Benutzeroberfläche zu verwenden, ist mc (Midnight Commander) eine gute Wahl.
quelle
Meine Lösung ist zu verwenden
rsync
. Es kann Verzeichnisse kopieren, die Quelldateien nach einem erfolgreichen Kopiervorgang entfernen (und sie so "verschieben") und unter anderem Fortschrittsberichte anzeigen (insbesondere teilweise kopierte Verzeichnisse synchronisieren und über das Netzwerk arbeiten).So würde ich ein Verzeichnis mit rsync und einem Fortschrittsbericht verschieben:
Stellen Sie sicher,
$src
dass Sie nicht mit einem Backslash enden, sonst erhalten Sie eine andere Bedeutung als die von GNUcp
.Das
rm -r
am Ende wird benötigt, weil--remove-source-files
erst die Quelldateien entfernt werden, nachdem jede erfolgreich kopiert wurde, nicht die Verzeichnisse. Das&&
stellt sicher, dass es nur ausgeführt wird, wenn rsync erfolgreich abgeschlossen wurde. Wenn Sie paranoid sind, können Sie es durch eine Art rekursives ersetzenrmdir
, wie zfind $src -d -exec rmdir {} +
Der einzige Nachteil ist, dass die
-P
Option den Fortschritt für jede Datei anzeigt, nicht für den gesamten Kopiervorgang. Dies kann unbrauchbar sein, wenn Sie versuchen, ein Verzeichnis mit vielen kleinen Dateien zu verschieben. Die neueste Entwicklungsversion von rsync verfügt über ein alternatives Flag--info=progress2
, das den Fortschritt für den gesamten Vorgang anzeigt.quelle
Um zu vermeiden, dass Coreutil-Patches hinzugefügt werden, um den Fortschrittsbalken zu
mv
und hinzuzufügencp
, istgcp
(Goffi's CoPier) eine neue Alternative: http://wiki.goffi.org/wiki/Gcp/enVerwendung wie
cp
bei Optionen-r
für die Rekursivität und-v
für die Ausführlichkeit.Es verwendet eine Dateiwarteschlange, wenn mehrere Befehle gleichzeitig aufgerufen werden. Außerdem können kopierte Dateinamen in einem Protokoll aufgezeichnet werden. Weitere Informationen finden Sie im Abschnitt Manpage zum Speichern von Quellen .
Hier ist ein gutes Tutorial für den Einstieg
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/quelle
Zunächst einmal: Ich kopiere keine großen Dateien ohne ionice, es sei denn, ich weiß, dass ich den Computer eine halbe Stunde oder länger nicht benutzen möchte.
Zweitens: Alle meine Partitionen werden aufgezeichnet, sodass das Kopieren innerhalb von Partitionen keine Zeit in Anspruch nimmt. Wenn es eine lange Kopie ist mache ich eine
du -sm
auf die Dateien unddf -m | grep copy_to_partition
. Wenn ich dann neugierig bin, wie lange es noch dauern wird, mache ich das nochdf
einmal und sehe, wie viel von den Dateien kopiert wurde.quelle
Auf meiner Mint verwende ich gerne gcp für diese oder die Curl-Lösung (was wirklich nett ist)
Möglicherweise müssen Sie es installieren
sudo apt-get install gcp
Und eine sehr schöne und hervorragende Aufgabe für den Fortschrittsbalken mit Infos zu
in einem gut lesbaren Format ist:
Möglicherweise müssen Sie es auch zuerst installieren
sudo apt-get install curl
quelle
gcp
unterstützt das Verschieben von Dateien nicht, dh Quelldateien müssen nach erfolgreichem Kopieren manuell entfernt werden.Dies gibt Ihnen keinen Fortschrittsbalken, aber drücken
CTRL-T
Sie und Sie senden einenSIGINFO
anmv
, der meldet, an welcher Datei gearbeitet wird und wie weit der Prozess fortgeschritten ist. Ziemlich praktisch, um dies für große Dateiübertragungen zu haben, möglicherweise nicht so nützlich für eine Übertragung mit vielen kleinen Dateien.Ein kurzes Beispiel:
quelle
INFO: unknown signal; killall -l lists signals.
geklappt : Ich glaube, SIGINFO ist nur auf einigen BSDs verfügbar, nicht im Standard-POSIX.Dient
mv -v
zum Drucken einer Zeile pro verschobener Datei undpv -l
zum Drucken des Fortschritts basierend auf der Zeilenzahl (in Kraft der Anzahl der Dateien).Sie benötigen
pv
(Pipe Viewer): http://www.ivarch.com/programs/pv.shtmlVerwenden Sie den folgenden Befehl, um die Anzahl der Dateien abzurufen:
Dieser Befehl zeigt Fortschrittsinformationen basierend auf der Anzahl der kopierten Dateien an. Dies funktioniert am besten, wenn es viele kleinere Dateien gibt. Wenn es nur wenige Dateien gibt, die riesig sind, werden Sie nicht viel Spaß haben.
Beachten Sie, dass
mv
auf der gleichen Partition schnell sein sollte.mv
auf eine andere Partition wäre das gleiche wiecp source target
gefolgt vonrm source
. Hier sind also zwei Befehle zum Kopieren von Verzeichnissen mit Fortschrittsinformationen.So melden Sie den Fortschritt basierend auf der Anzahl der kopierten Dateien:
So melden Sie den Fortschritt anhand der kopierten Bytes:
Weitere Informationen finden Sie hier: Fortschrittsinformationen über pv für die Verzeichniskopie
quelle
Ausnahmslos suche ich nach dieser Antwort, nachdem ich den Befehl 'mv' gestartet habe. An diesem Punkt möchte ich sie nicht erneut starten. Wenn Sie in dieser Situation sind, können Sie den Fortschritt auf sehr einfache Weise überwachen (oder feststellen, ob es weit genug ist, dass es sich nicht lohnt, ihn zu töten), indem Sie Folgendes ausführen:
Dadurch wird nur die Größe des Verzeichnisses gedruckt, sodass Sie sehen können, wie viele Daten kopiert wurden, oder Sie können es einige Male ausführen, um zu sehen, wie schnell die Daten übertragen werden.
quelle