Jak zobrazit průběh a rychlost přenosu při kopírování souborů pomocí cp?

277

Jinak existuje nějaký alternativní nástroj příkazového řádku, který to může dosáhnout?

    
dané Olivier Lalonde 14.12.2010 05:48

16 odpovědí

207

Zatímcocp nemá tuto funkci, můžete použítpv:

pv my_big_file > backup/my_big_file

Poznámka: tato metoda ztratí oprávnění a vlastnictví souboru. Soubory, které byly takto zkopírovány, budou mít stejná oprávnění, jako kdybyste je vytvořili sami a patříte vám.

V tomto příkladupv v podstatě právě vyvede soubor na stdout *, který přesměrujete na soubor pomocí operátoru>. Současně vytiskne informace o pokroku na terminálu, když to uděláte.

To vypadá takto:

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

Musíte nainstalovat pv (případně zadejtesudo apt-get install pv) ve vašem systému.

*: Technický bit

Existují tři důležité datové toky v systémech typu unix: stdout (standardní výstup), stderr (standardní chyba) a stdin (standardní vstup). Každý program má všechny tři, abych tak řekl. Operátor přesměrování> přesměruje výstup programu do souboru. Bez argumentů, jak vidíte výše,> přesměruje standardní výstup programu do souboru. cp v podstatě neznamená nic lepšího než

cat source > destination

(kdecat právě čte soubor a vytiskne ho na stdout). pv je stejně jako kočka, ale pokud přesměrujete výstupní proud někde jinde, místo toho vytiskne informace o pokroku na stdout.

Podívejte se naman pv a dozvíte se více o tom.

Další možností je DoR navrhuje v této odpovědi , místo toho použijte rsync:

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

Tím se zachovávají oprávnění k souboru / vlastnictví při zobrazování pokroku.

    
odpověděl Stefano Palazzo 14.12.2010 06:17
132

Neexistuje. Podívejte se zde proč. Ačkoli to dělá víc, než potřebujete, rsync má jednu s parametrem--progress. -A udrží oprávnění atd. A -h bude čitelný pro lidi.

rsync -ah --progress source destination

Výstup bude vypadat takto:

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)
    
odpověděl bartekbrak 15.10.2012 10:06
84

Chcete-li zjistit, zda se soubory správně přenášejí, můžete použítgcp agcp je jako cp, ale ve výchozím nastavení vám dává ukazatel průběhu, abyste viděli, co se kopíruje. Jako wiki poznámky programugcp má několik užitečných funkcí, jako je

  
  • přenést indikaci progrese
  •   
  • nepřetržité kopírování při chybě (přeskočte na další soubor)
  •   
  • kopírovat protokolování stavu: gcp zaznamenává všechny své akce tak, aby bylo možné vědět, které soubory byly úspěšně zkopírovány
  •   
  • název manglingu pro manipulaci s cílovými omezeními souborového systému (například odstranění nekompatibilních znaků "*" nebo "?" na FAT)
  •   

Ovšem i když panel nástrojů dosáhl při používání nástroje 100%, musíte počkat, dokud se výzva k terminálu neobjeví dříve, než bezpečně vyjmete médium, abyste zajistili úspěšné dokončení procesu přenosu.

gcp se používá k kopírování souborů a má volby, jako je--preserve, aby mohly být zachovány různé atributy a oprávnění a--recursive, aby mohly být zkopírovány celé adresáře. Další informace o jeho možnostech lze nalézt zadánímman gcp nebo přejděte na stránky Ubuntu online . Návod je k dispozici také na těchto stránkách .

Nainstalujtegcp z úložišť pomocí

sudo apt-get install gcp

( Poznámka : v Ubuntu 12.10 je nový automatový bod například/media/user/usbdisk)

Soubor můžete zkopírovat na médium zadáním

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

a zkopírujte složku na médium pomocí

gcp -rv ~/Podcasts /media/Mik2

Vzorový výstup zgcp s pruhem postupu:

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

Samozřejmě můžete zadat více souborů nebo složek ke kopírování na disk a vman gcp je obsaženo mnoho dalších možností.

    
odpověděl user76204 15.10.2012 13:09
54

Získávám výkop z použití cURL pro tento přesný účel. Man page uvádí protokol "FILE" jako podporovaný, takže ho použijte jako každý jiný protokol v adrese URL:

curl -o destination FILE://source

Rychlost, pokrok, zbývající čas a další - vše v známém formátu.

    
odpověděl mathemagician 02.02.2013 10:00
22

Zatímco se nezobrazuje rychlost, při kopírování více souborů bude volba-v k příkazucp poskytovat informace o postupu. např.

cp -rv old-directory new-directory
    
odpověděl Ubuntourist 14.12.2010 18:17
19

Jádro zná většinu dat, například rychlost a často také procentuální podíl. Moderní jádra to vystavují prostřednictvím jejich souborového systému / proc.

zobrazuje se z Odkazu tyto informace. Může se připojit k již spuštěným programům a provádět periodické aktualizace, jako je tato:

$ 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)
...
    
odpověděl Jürgen Weigert 25.02.2014 15:34
11

Zatímcopv se může vypořádat s lokálními úlohamicp, pomocídd spv může řešit lokální (cp) a vzdálené (scp) úkoly.

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

Ujistěte se, žepath/to/dest.mkv ukončítouch path/to/dest.mkv

Toto může ukazovat pokrok, ale pokud chcete procento informací,

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

Nahraďte100M výše skutečnou velikostí zdrojového souboru.

Zde přichází dálková část

Zatímcoscp sotva může ukázat aktuální průběh, pomocídd spv je kus dortu.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
    
odpověděl onemach 05.01.2013 09:08
11

Existuje nástroj nazvanýprogress v úložištích, který je schopen prozkoumat různé příkazy a zobrazit informace o postupu pro ně.

Nainstalujte jej pomocí příkazu

sudo apt-get install progress

Tento nástroj lze použít takto:

cp bigfile newfile & progress -mp $!

Výstup:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)
    
odpověděl Nathaniel A Malinowski 27.09.2016 00:35
10

Existuje nový nástroj nazvaný cv, který může nalézt jakýkoli deskriptor vztahující se k spuštěnému příkazu a zobrazovat pokrok a rychlost: Odkaz

cv -w

zobrazuje statistiky všech spuštěných operací cp, mv atd.

    
odpověděl naugtur 13.07.2014 13:33
6

Asi mnozí říkali, že cp tuto funkci neobsahuje.

Stačí hodit své 0,02 dolaru, co obvykle dělám s triviálními kopírovacími situacemi (tj. ne-R):

  1. Zjistěte, jak velký soubor je a pamatujte

  2. Začněte kopírovat

  3. Otevřete jiný terminál

  4. Spusťtewatch ls -lh DIR v adresáři, kde je cíl

To může mě udržovat na velikosti cílového souboru s velmi malým potížím.

Jako alternativu pro méně triviální situace, např. rekurzivní kopírování adresářů, můžete použítwatch du -hs DIR pro zobrazení souhrnu velikosti DIR. Ovšem du může trvat dlouho a může dokonce zpomalit kopírování, takže můžete chtít použít argument-n INTERVAL ke sledování, takže kompromis je přijatelný.

Aktualizace: V případě, že použijete zástupné karty s příkazem používaným s watch du, např. watch du -hs backup/*, nezapomeňte citovat:

watch "du -hs backup/*"

jinak budou divoké karty rozbaleny pouze jednou , když budou hodinky spuštěny , takže se nebudou dívat na nové soubory / podadresáře.

    
odpověděl Alois Mahdal 16.11.2012 14:20
4

dd status=progress

Možnost přidána v GNU Coreutils 8.24+ (Ubuntu 16.04):

dd if=src of=dst status=progress

Terminál zobrazuje řádek typu:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

Podívejte se také na: Jak monitorujete vývoj dd?

    
odpověděl Ciro Santilli 新疆改造中心 六四事件 法轮功 14.09.2016 18:18
3

V závislosti na tom, co chcete dělat, může být odpověď Midnight Commander (mc). Překvapuje mě, že to ještě nebylo zmíněno.

Nástroje jakopv neborsync jsou dobré pro zobrazení pokroku při přenosu jednoho obrovského souboru, ale pokud jde o kopírování celých adresářů / stromů,mc vypočítá velikost a pak je velmi dobře zobrazen. Navíc je k dispozici na většině systémů.

    
odpověděl kralyk 30.01.2016 18:33
2

Použijte skript shellu:

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "" "" 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' "") count=0
}

Vypadá to jako:

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

Zdroj

    
odpověděl Jan 01.09.2014 15:45
2

Pokud máte rsync 3.1 nebo vyšší (rsync --version), můžete zkopírovat (cp -Rpn) při zachování oprávnění a vlastnictví, obnovit adresáře, "no clobber" a zobrazit celkový pokrok (namísto pouhého postupu podle souboru) , kopírovací frekvenci a (velmi hrubý) odhadovaný zbývající čas:

sudo rsync -a --info=progress2 --no-i-r /source /destination

Upozorňujeme, že sudo je potřeba pouze v případě, že se zabýváte adresáři / soubory, které nevlastníte. Také bez--no-i-r může být procento v určitém okamžiku v průběhu kopírování resetováno na nižší číslo. Možná, že pozdější verze rsync budou výchozí na hodnotu no-i-r s info = progress2, ale neplatí v aktuální verzi 3.1.2.

Zjistil jsem, že procento a zbývající čas jsou značně přeceňovány při kopírování do adresáře, který již obsahuje soubory (např. když byste obvykle používali cp -n "no clobber").

    
odpověděl S Lentz 02.03.2016 23:22
0

Můžete kopírovat libovolný program. Současně můžete spustitsudo iotop a vidět skutečně rychlost čtení a zápisu disku bez pokroku.

    
odpověděl McKelvin 11.01.2018 16:47
0

Zkontrolujte zdrojový kód pro progress_bar v úložišti pod git

Odkaz

Vyzkoušejte také vlastní balík skriptů supreme

Stáhněte soubor deb a nainstalujte do distribuce založené na debian nebo stáhněte zdrojové soubory, upravte a použijte pro jiné distribuce

Přehled funkcí

(1) Otevřete Aplikace ----Firefox ----Kalkulačka ---- Nastavení

(2) Správa souborů ----Vyhledávání ----Navigovat ---- Rychlý přístup

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3) Správa telefonu ---- Přesun / Kopírování z telefonu ---- Přesunout / Kopírovat do telefonu ---- Synchronizace složek

(4) Správa USB ---- Přesunout / Kopírovat z USB ---- Přesunout / Kopírovat na USB

    
odpověděl KIRAN B 10.09.2018 16:54