Vraag Hoe de voortgang en snelheid van de overdracht te tonen bij het kopiëren van bestanden met cp?


Is er anders een ander opdrachtregelprogramma dat dit kan bereiken?


274
2017-12-14 04:48


oorsprong




antwoorden:


Terwijl cp heeft deze functionaliteit niet, die je kunt gebruiken pv om dit te doen:

pv my_big_file > backup/my_big_file

Opmerking: met deze methode verliest u de rechten en het eigendom van het bestand. Bestanden die op deze manier zijn gekopieerd, hebben dezelfde rechten als wanneer u ze zelf zou hebben gemaakt en van u zal zijn.

In dit voorbeeld pv in feite voert het gewoon het bestand uit naar stdout *, dat je doorverwijst naar een bestand met behulp van de > operator. Tegelijkertijd drukt het informatie over de voortgang naar de terminal af als u dat doet.

Dit is hoe het eruit ziet:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

Het kan nodig zijn Installeer pv (alternatief, type sudo apt-get install pv) op uw systeem.


*: De technische bit

Er zijn drie belangrijke datastromen in een unix-achtig systeem: stdout (standaarduitvoer), stderr (standaardfout) en stdin (standaardinvoer). Elk programma heeft alle drie, om zo te zeggen. De > redirection-operator leidt programma-uitvoer om naar een bestand. Zonder argumenten, zoals je hierboven ziet, > stuurt een programma door standaard uitvoer naar een bestand. cp eigenlijk niets mooier dan

cat source > destination

(waar cat leest gewoon een bestand en drukt het af naar stdout). pv is net als kat, maar als je de uitvoerstroom ergens anders omleidt, zal het in plaats daarvan voortgangsinformatie afdrukken naar stdout.

Kijk eens naar man pv om er meer over te leren.


Een andere optie, zoals alt textDoR suggereert in dit antwoord, is in plaats daarvan rsync gebruiken:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

Hierdoor blijven de bestandsrechten / eigendom behouden terwijl de voortgang wordt weergegeven.


204
2017-12-14 05:17



Het kan wel of niet significant zijn (afhankelijk van de situatie), maar pv behandelt machtigingen niet op dezelfde manier als cp doet ... (op basis van een snelle test die ik heb geprobeerd: pv heeft de execute bit niet gekopieerd .. rsync deed. - Peter.O
IMO: alias cp="rsync -avz" CP is verouderd. - Marco Ceppi♦
Als je op mij lijkt en vergeet pv, je kunt erin gaan snuffelen /proc/PID of cp/fd en /proc/PID of cp/fdinfo om de voortgang te achterhalen. (Het is aan jou om snelheid af te leiden.) Ik gebruik deze techniek om te bekijken updatedb. - Thanatos
Ja, -z moet waarschijnlijk alleen worden gebruikt voor netwerkexemplaren; het comprimeren en decomprimeren van de gegevens voor een lokale kopie is pure overhead. - Matthew Read
@Rodrigo rsync -avzP is wat je wilt gebruiken. - Marco Ceppi♦


Er is geen. Zien hier waarom. Hoewel het meer doet dan je nodig hebt, heeft rsync er één mee --progress parameter. De -a houdt machtigingen, enz., En -h zal leesbaar zijn voor de mens.

rsync -ah --progress source destination

De uitvoer ziet er ongeveer zo uit:

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)

130
2017-10-15 08:06



Dit werkt geweldig in de huidige Ubuntu (14.10). Het ondersteunt ook de -r vlag naar recurse mappen. Het kan zelfs worden gealiast als een directe vervanging voor cp: alias cp="rsync -ah --progress" - rustyx
Works zwelt op OS X, met de bonus dat het tools kan gebruiken die bij het systeem zijn geleverd. - Ivan X
dit is geweldig, de uitvoer ziet eruit als filename MB-copied MB-speed time-remaining) - Rudolf Olah
ik vind dit alternatief beter dan pv, vooral omdat rsync deel uitmaakt van de standaardinstallatie - Joao Costa
@bartekbrak bedankt voor het delen. Ik ben momenteel op macOS 10.12.x met een homebrew versie van rsync 3.1.2 en gebruik --progress laat mijn hoofd ronddraaien en kijk naar al het output-display in de terminal. Dus die komen hier uit zoekopdrachten met AOL-trefwoorden, rsync -ah --info=progress2 [source] [destination]  presenteert de output op een iets meer gezonde ️ manier IMHO. - Chris


Als u wilt zien of uw bestanden correct worden overgezet, kunt u dit gebruiken gcp en gcp is als cp maar standaard geeft het je een voortgangsbalk zodat je kunt zien wat er wordt gekopieerd. Zoals het programma is wiki-aantekeningen, gcp heeft verschillende handige functies zoals

  • progressie-indicatie overdragen
  • continu kopiëren bij fouten (ga naar volgend bestand)
  • kopieer status logging: gcp logt alle acties zodat het mogelijk is om te weten welke bestanden succesvol zijn gekopieerd
  • naammangling om doelbestandssysteembeperkingen te verwerken (bijvoorbeeld het verwijderen van incompatibele tekens "*" of "?" op FAT)

Zelfs als de voortgangsbalk 100% bereikt is bij het gebruik van de tool, moet u wachten totdat uw terminalprompt opnieuw verschijnt voordat u uw media veilig verwijdert, zodat u zeker weet dat het overdrachtsproces succesvol is voltooid.

gcp wordt gebruikt om bestanden te kopiëren en heeft opties zoals --preserve zodat verschillende attributen en permissies kunnen worden bewaard en --recursivezodat hele mappen kunnen worden gekopieerd. Meer informatie over de opties is te vinden door in te voeren man gcp of door naar de Ubuntu manpages online. Een tutorial is ook beschikbaar Op deze site.

Installeren gcp van de repositories met

sudo apt-get install gcp

(Notitie: in Ubuntu 12.10 is het nieuwe automountpunt bijvoorbeeld /media/user/usbdisk)

U kunt een bestand naar uw media kopiëren door te typen

gcp /home/mike/file.mp4 /media/usb

en kopieer een map naar uw media met

gcp -rv ~/Podcasts /media/Mik2

Voorbeelduitvoer van gcp met de voortgangsbalk:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

Je kunt natuurlijk meerdere bestanden of mappen opgeven om naar je schijf te kopiëren en er zijn een heleboel andere opties die je kunt vinden man gcp.


84
2017-10-15 11:09



Er is een fout opgetreden bij het verwerken van ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
als u een X11-display open hebt op de machine, kunt u deze gewoon instellen export DISPLAY=:0.0 voor het starten van gcp. Als de machine headless is, dan zou je een xsessie moeten starten in een virtuele framebuffer of zo, dan zou je waarschijnlijk gewoon naar een ander programma moeten zoeken - user292067
gcp is redelijk, maar de eis DBUS / X is vreemd. Ik heb dit via SSH afgehandeld door ssh-forwarding te gebruiken: ssh -X user@host en dat stelde me in staat om het uit te voeren. - Oli♦


Ik krijg een kick van het gebruik van cURL voor dit exacte doel. De man-pagina vermeldt het "FILE" -protocol als ondersteund, dus gebruik het gewoon als elk ander protocol in een URL:

curl -o destination FILE://source

Snelheid, voortgang, resterende tijd en meer - allemaal in een bekend formaat.


54
2018-02-02 09:00



Dit is geweldig, vooral in omgevingen waar het verboden is om nieuwe hulpmiddelen te installeren en waar rsync niet beschikbaar is.
Briljant, dit moet een bekende hack zijn! - ionreflex
Goed antwoord! Knap! - 9301293
Dit heeft vermoedelijk de hetzelfde nadeel als pv, dat het geen rechten zal opslaan. - Ploni


Hoewel het geen snelheid weergeeft, is bij het kopiëren van meerdere bestanden de -v optie voor de cp commando geeft je voortgangsinformatie. bijv.

cp -rv old-directory new-directory

22
2017-12-14 17:17



Vooruitgang info? Dit is slechts uitgebreide uitvoer. Om voortgangsinformatie te geven, zou je nu minimaal moeten weten hoeveel bestanden, of zelfs welke bestanden, gekopieerd moeten worden. - Julian F. Weinert


De kernel kent de meeste gegevens, zoals snelheid, en vaak ook een percentage. Moderne kernels stellen dit bloot via hun / proc bestandssysteem.

showspeed van https://github.com/jnweiger/showspeed gebruikt die info. Het kan hechten aan reeds draaiende programma's en periodieke updates zoals deze geven:

$ 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)
...

19
2018-02-25 14:34



Goed zo. Hoe werkt het percentages uit? Ik vermoed alleen in het geval dat het bestand open is als alleen-lezen? En het zal waarschijnlijk niet werken in geval van verspreide toegang. - j_kubik
In dit geval kunt u ook een andere terminal gebruiken om uit te voeren pkill -USR1 dd maken dd toon de status, een andere optie zou zijn watch -n 1 pkill -USR1 dd om het zijn voortgang periodiek (elke seconde) te laten zien. - Yaron
Rechts. Veel tools kregen een ingebouwde manier om statistieken in de loop van de tijd te rapporteren. dd is geen uitzondering. Moderne implementaties hebben de optie status = voortgang. Showspeed is een klassieke unix-achtige "one tool for one purpose" -oplossing - net zoals pv. Maar het heeft verschillende usecases: denk aan kopjes die een bestand door ghostscript pompen of je wilt de ETA kennen voor een aanhoudende cp of teer. Het kan voor 95% al ​​na een paar uur gedaan zijn en je wilt waarschijnlijk niet opnieuw opstarten om pv toe te voegen ... Verspreide toegang zou niet goed werken. Showspeed alleen monsters zoeken posities. - Jürgen Weigert


Terwijl pv kan omgaan met lokaal cp taken, gebruiken dd met pv kan omgaan met zowel lokale (cp) en op afstand (scp) taken.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

Zorg alstublieft voor de path/to/dest.mkv uitgangen door touch path/to/dest.mkv

Dit kan de voortgang tonen, maar als u de percentage-informatie wilt,

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Vervangen 100M hierboven met de ware grootte van uw bronbestand.

Hier komt het Remote Part

Terwijl scp kan de huidige voortgang nauwelijks weergeven, met dd met pv is een fluitje van een cent.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

11
2018-01-05 08:08



nieuwer dd heeft status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功


Er is een nieuwe tool genaamd cv die elke descriptor kan vinden gerelateerd aan een lopende opdracht en toont voortgang en snelheid: https://github.com/Xfennec/cv

cv -w

geeft de statistieken af ​​voor alle lopende cp, mv enz. bewerkingen


10
2017-07-13 11:33



watch cv -q is nog netter - nwgat
Het toont alleen vooruitgang voor een individuele bestanden, het beseft wel of een cp is een map recursief kopiëren of niet. - Flimm
Het oorlog hernoemd naar vooruitgang. Geweldige tool! - sebastian