Ich nehme an, ich könnte die Anzahl der Dateien im Quellverzeichnis mit der Anzahl der Dateien im Zielverzeichnis vergleichen, wenn cp fortschreitet, oder vielleicht mit der Ordnergröße. Ich habe versucht, Beispiele zu finden, aber alle Bash-Fortschrittsbalken scheinen für das Kopieren einzelner Dateien geschrieben zu sein. Ich möchte eine Reihe von Dateien kopieren (oder ein Verzeichnis, falls das erstere nicht möglich ist).
Sie können auch rsync
anstelle von cp
folgendermaßen verwenden:
rsync -Pa source destination
Dadurch erhalten Sie einen Fortschrittsbalken und eine voraussichtliche Fertigstellungszeit. Sehr praktisch.
Um eine Fortschrittsleiste anzuzeigen, während Sie eine rekursive Kopie von Dateien, Ordnern und Unterordnern (einschließlich Verknüpfungen und Dateiattributen) erstellen, können Sie gcp
verwenden.
gcp -rf SRC DEST
Hier ist die typische Ausgabe beim Kopieren eines großen Ordner mit Dateien:
Copying 1.33 GiB 73% |##################### | 230.19 M/s ETA: 00:00:07
Beachten Sie, dass nur eine Fortschrittsleiste für den gesamten Vorgang angezeigt wird. Wenn Sie jedoch eine einzelne Fortschrittsleiste pro Datei wünschen, können Sie rsync
verwenden:
rsync -ah --progress SRC DEST
Sie können sich das Tool vcp
ansehen. Das ist ein einfaches Kopierwerkzeug mit zwei Fortschrittsbalken: Einer für die aktuelle Datei und einer für die Gesamtdatei.
EDIT
Hier ist der Link zu den Quellen: http://members.iinet.net.au/~lynx/vcp/ Die Manpage ist hier zu finden: http://linux.die.net/ man/1/vcp
Die meisten Distributionen haben ein Paket dafür.
Hier eine andere Lösung: Verwenden Sie das Tool bar
Sie könnten es so aufrufen:
#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}
Sie müssen den Weg über tar gehen, und bei kleinen Dateien ist dies ungenau. Sie müssen auch darauf achten, dass das Zielverzeichnis vorhanden ist. Aber es ist ein Weg.
Ein einfacher Unix Weg ist, zum Zielverzeichnis zu gehen und watch -n 5 du -s
zu tun. Machen Sie es vielleicht schöner, indem Sie es als Bar zeigen. Dies kann in Umgebungen hilfreich sein, in denen Sie nur über die standardmäßigen Unix-Dienstprogramme verfügen und keine zusätzlichen Dateien installieren müssen. du-sh ist der Schlüssel, die Uhr muss nur alle 5 Sekunden ausgeführt werden. Vorteile : Funktioniert auf jedem Unix-System Nachteile : Keine Fortschrittsanzeige
Meine bevorzugte Option ist Advanced Copy , da sie die ursprünglichen cp
-Quelldateien verwendet.
$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
$ patch -p1 -i advcpmv-0.5-8.21.patch
$ ./configure
$ make
Die neuen Programme befinden sich jetzt in src/cp und src/mv. Sie können Ihre vorhandenen Befehle ersetzen:
$ Sudo cp src/cp /usr/local/bin/cp
$ Sudo cp src/mv /usr/local/bin/mv
Es gibt ein Werkzeug pv
, das genau dies tut: http://www.ivarch.com/programs/pv.shtml
Es gibt eine Ubuntu-Version in apt
Wie wäre es mit so etwas
find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})
Er findet alle Dateien im aktuellen Verzeichnis, leitet diese durch PV und gibt PV eine geschätzte Größe, damit die Fortschrittsanzeige funktioniert, und leitet sie dann an einen CP-Befehl mit dem Flag --parents weiter, damit der Pfad DEST mit dem SRC-Pfad übereinstimmt.
Ein Problem, das ich noch überwinden muss, ist das, wenn Sie diesen Befehl ausgeben
find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})
der Zielpfad wird zu/www/test/home/user/test/.... FILES ... und ich bin nicht sicher, wie ich den Befehl anweisen soll, den Teil '/ home/user/test' zu löschen. Deshalb muss ich es aus dem SRC-Verzeichnis heraus ausführen.
Um eine weitere Option hinzuzufügen, können Sie cpv
verwenden. Es verwendet pv
, um die Verwendung von cp
nachzuahmen.
Es funktioniert wie pv
, aber Sie können Verzeichnisse rekursiv kopieren
Sie können es bekommen hier
Überprüfen Sie den Quellcode für progress_bar im unteren git-Repository von mir
https://github.com/Kiran-Bose/supreme
Probieren Sie auch das benutzerdefinierte Bash-Skriptpaket supreme aus, um zu überprüfen, wie die Statusleiste mit den Befehlen cp und mv funktioniert
Funktionsübersicht
(1) Öffnen Sie Apps ---- Firefox ---- Rechner ---- Einstellungen
(2) Dateien verwalten ---- Suche ---- Navigieren ---- Schnellzugriff
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Telefon verwalten ---- Vom Telefon verschieben/kopieren ---- Zum Telefon verschieben/kopieren ---- Ordner synchronisieren
(4) USB verwalten ---- Verschieben/Kopieren von USB ---- Verschieben/Kopieren auf USB