it-swarm.dev

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

V opačném případě existuje alternativní nástroj příkazového řádku, který toho může dosáhnout?

357
Olivier Lalonde

Přestože cp tuto funkci nemá, můžete k tomu použít pv:

pv my_big_file > backup/my_big_file

Poznámka: Tato metoda ztratí oprávnění a vlastnictví souboru. Takto zkopírované soubory budou mít stejná oprávnění, jako kdybyste je sami vytvořili a patří vám.

V tomto příkladu pv v podstatě pouze vydá soubor do stdout *, který přesměrujete do souboru pomocí > operátor. Když to uděláte, současně vytiskne informace o průběhu do terminálu.

Vypadá to takto:

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

Možná budete muset Nainstalujte pv (alternativně zadejte Sudo apt-get install pv) ve vašem systému.


*: Technický bit

V unixovém systému existují tři důležité datové proudy: stdout (standardní výstup), stderr (standardní chyba) a stdin (standardní vstup). Každý program má všechny tři, abych tak řekl. The > Operátor přesměrování přesměruje výstup programu do souboru. Jak vidíte výše, bez argumentů > přesměruje program standardní výstup do souboru. cp v podstatě nedělá nic lepšího než

cat source > destination

(kde cat pouze přečte soubor a vytiskne jej do stdout). pv je jako kočka, ale pokud přesměrujete jeho výstupní proud někde jinde, vytiskne místo toho informace o průběhu.

Podívejte se na man pv se o tom dozvíte více.


Další možnost, jako alt textDoR navrhuje v tato odpověď , je místo toho použít 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á oprávnění/vlastnictví souborů a zároveň se zobrazí pokrok.

267
Stefano Palazzo

Není. Viz zde , proč. Ačkoli to dělá víc, než potřebujete, má rsync parametr --progress. -a Si ponechá oprávnění atd. A -h Bude čitelný člověkem.

rsync -ah --progress source destination

Výstup bude vypadat asi 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)
202
bartekbrak

Pokud chcete zjistit, zda se vaše soubory přenášejí správně, můžete použít gcp a gcp je jako cp, ale ve výchozím nastavení vám poskytuje indikátor průběhu, takže můžete vidět, co se kopíruje. Protože program wiki poznámky , má gcp několik užitečných funkcí, například

  • indikace průběhu přenosu
  • nepřetržité kopírování při chybě (přeskočit na další soubor)
  • copy status logging: gcp zaznamenává všechny své akce, takže je možné zjistit, které soubory byly úspěšně zkopírovány
  • mangling jména pro řešení omezení cílového systému souborů (například mazání nekompatibilních znaků "*" nebo "?" na FAT)

Nicméně i když ukazatel průběhu dosáhl 100%, když používáte nástroj, musíte před bezpečným vyjmutím média počkat, až se terminálový řádek znovu objeví, abyste mohli zajistit úspěšné dokončení procesu přenosu.

gcp se používá ke kopírování souborů a má možnosti jako --preserve, aby bylo možné zachovat různé atributy a oprávnění a --recursive, aby bylo možné kopírovat celé adresáře. Více informací o jeho možnostech najdete zadáním man gcp nebo přechodem na buntu manuály online . K dispozici je také výukový program na tomto web .

Nainstalujte gcp z úložišť pomocí

Sudo apt-get install gcp

( Poznámka : v Ubuntu 12.10 je novým automatickým bodem 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 své médium pomocí

gcp -rv ~/Podcasts /media/Mik2

Ukázkový výstup z gcp s ukazatelem průběhu:

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

Můžete samozřejmě určit více souborů nebo složek, které se mají zkopírovat na disk, a v man gcp.

91
user76204

Dostanu kop z používání CURL pro tento přesný účel. Na manuálové stránce je protokol „FILE“ uveden jako podporovaný, takže jej 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 ve známém formátu.

70
mathemagician

I když to nezobrazuje rychlost, při kopírování více souborů vám možnost -v K příkazu cp poskytne informace o průběhu. např.

cp -rv old-directory new-directory
28
Ubuntourist

V repozitářích je nástroj nazvaný progress, který je schopen zkoumat různé různé příkazy a zobrazovat pro ně informace o průběhu.

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)
21

Jádro zná většinu dat, například rychlost, a často také procento. Moderní jádra to odhalují prostřednictvím svého/proc souborového systému.

showspeed from https://github.com/jnweiger/showspeed použije tyto informace. Může se připojit k již spuštěným programům a poskytovat pravidelné 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)
...
20
Jürgen Weigert

Zatímco pv může řešit místní úkoly cp, použití dd s pv může řešit místní (cp) i vzdálené (scp) úkoly.

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

Zkontrolujte prosím path/to/dest.mkv ukončí o touch path/to/dest.mkv

To může ukazovat pokrok, ale pokud chcete procentuální informace,

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

Nahradit 100M výše se skutečnou velikostí zdrojového souboru.

Zde přichází vzdálená část

Zatímco scp nemůže stěží ukázat aktuální postup, použití dd s pv je kousek koláče.

ssh [email protected] dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
13
onemach

Je zde nový nástroj zvaný cv, který dokáže najít jakýkoli deskriptor související s běžícím příkazem a ukázat postup a rychlost: https://github.com/Xfennec/cv

cv -w

vydává statistiky pro všechny běžící operace cp, mv atd

11
naugtur

Jak mnozí uvedli, cp tuto funkci nezahrnuje.

Stačí jen zahodit 0,02 USD, co obvykle dělám s triviální situací kopírování (tj. Ne -R):

  1. Podívejte se, jak velký je soubor, a nezapomeňte

  2. Zahajte kopírování

  3. Otevřete další terminál

  4. Spusťte watch ls -lh DIR V adresáři, kde je cíl

To mě může informovat o cílové velikosti souboru, s poměrně minimálními problémy.

Jako alternativa pro méně triviální situace, např. rekurzivně kopírující adresáře, můžete použít watch du -hs DIR a zobrazit přehled velikosti DIR. Výpočet však může trvat dlouho a může dokonce zpomalit kopírování, takže byste mohli chtít použít argument -n INTERVAL, Aby bylo možné kompromis akceptovat.

Aktualizace: V případě použití zástupných karet s příkazem používaným u 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 nebude dívat na nové soubory/podadresáře.

9
Alois Mahdal

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í, opakovat adresáře, „žádný clobber“ a zobrazit celkový pokrok (namísto pouhého pokroku podle souboru), rychlost kopírování a (velmi hrubý) odhadovaný zbývající čas s:

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

Pamatujte, že Sudo je potřeba pouze v případě, že pracujete s adresáři/soubory, které nevlastníte. Také bez --no-i-r, procento se může v určitém okamžiku během kopírování resetovat na nižší číslo. Možná novější verze rsync budou standardně nastaveny na no-i-r s info = progress2, ale v aktuální verzi 3.1.2 to není.

Zjistil jsem, že procento a zbývající čas jsou hrubě nadhodnoceny při kopírování do adresáře, který již obsahuje soubory (tj. Jako když obvykle používáte cp -n "bez clobberu").

7
S Lentz

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 ukazuje řádek typu:

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

Viz také: Jak monitorujete průběh dd?

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

Nástroje jako pv nebo rsync jsou dobré pro zobrazení průběhu přenosu jednoho obrovského souboru, ale pokud jde o kopírování celých adresářů/stromů, mc vypočítá velikost a poté zobrazí pokrok velmi pěkně. Navíc je k dispozici na většině systémů.

4
kralyk

Použijte skript Shell:

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

Vypadá to takto:

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

Zdroj

3
Jan

další možnost zachování atributů by mohla být (pokud source je složka, bude vytvořena v destination)

tar -c source | pv -e -t -p -r | tar -C destination  -x

doufám, že to může být pro někoho užitečné. Chcete-li odhadovanou dobu přenosu, lze toho dosáhnout pomocí do -s source předem a předáním jako -s <size> parametr k pv.

1
ciekawy

pv ví, jak sledovat deskriptory souborů dané pid, ať už je to cp nebo něco jiného

Z dokumentace:

   (Linux only): Watching file descriptor 3 opened by another process 1234:

          pv -d 1234:3

   (Linux only): Watching all file descriptors used by process 1234:

          pv -d 1234

Příklad:

md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============>                                 ] 29% ETA 0:00:53

$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov:  754MiB 0:00:04 [97,2MiB/s] [======================>                       ] 52% ETA 0:00:07
4:/media/windows/copy.mov:  754MiB 0:00:04 [97,3MiB/s] [     <=>                                                                   ] 
1
alecail

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

https://github.com/Kiran-Bose/supreme

Vyzkoušejte také vlastní balíček bash skriptů nejvyšší

Stáhněte si deb soubor a nainstalujte ho v distribuci založené na Debianu nebo si stáhněte zdrojové soubory, upravte je a použijte pro další distribuce

Přehled funkcí

(1) Otevřené aplikace ---- Firefox ---- Kalkulačka ---- Nastavení

(2) Správa souborů ---- Vyhledávání ---- Navigace ---- 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řesunout/Kopírovat z telefonu ---- Přesunout/Kopírovat do telefonu ---- Synchronizovat složky

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

0
KIRAN B

Můžete kopírovat použít jakýkoli program. Současně můžete začít Sudo iotop a uvidíte skutečnou rychlost čtení/zápisu na disk, ale bez pokroku.

0
McKelvin