it-swarm-eu.dev

Zobrazit přenosovou rychlost při provádění "cp" z příkazového řádku?

Je to možné?

50
Chris

Standardní příkaz coreutils cp to nepodporuje. Kolem je plovoucí náplast Gentoo, která ji přidává pro různé verze, i když již z nějakého důvodu není součástí Gentoo; verze pro coreutils 6.10 je v jejich bugzille , a jsem si jistá, že v okolí je spousta dalších.

Pokud nechcete záplatovat cp, musíte použít nějaký jiný příkaz. Například rsync má příznak --progress, Takže můžete udělat:

rsync --progress source destination

Pokud namísto kopírování data cat a přesměrování stdout do cíle (tj. cat source > destination), Pak můžete použít program, který měří propustnost potrubí a vložit je do středu (cat source | SOME-PROGRAM > destination); existuje pár uvedených v tato související otázka . Ten, který jsem tam doporučil, byl pv (Prohlížeč trubek):

Screenshot of pv from the pv homepage

Pokud jej označíte příznakem --rate, Zobrazí se rychlost přenosu

53
Michael Mrozek

Zjistil jsem, že použití pv tímto způsobem funguje dobře pro tento účel

pv -p file1 > file2

Přepínač -p Zobrazuje průběh přenosu souborů. Chcete-li zobrazit rychlost přenosu, přidejte přepínač -r. Pokud chcete vidět průměrnou přenosovou rychlost v průběhu času, můžete použít přepínač -a.

pv -pra file1 > file2
17
Patrick

Vím, že je to dost staré, ale ...

Pokud skutečně nechcete zobrazovat rychlost, ale chcete jen sledovat, zda se při kopírování velkého souboru něco děje, můžete také použít příkaz watch (funguje také s mv ):

cp /path/to/myfile /path/to/target/myfile

Poté v jiném prostředí nebo posunutím příkazu copy na pozadí (např. Pomocí Ctrl + Z následované bg), můžete zkontrolovat výsledek pomocí:

watch "ls -sh1 /path/to/target"

To bude průběžně aktualizovat výstup aktualizace příkazu ls (ve výchozím nastavení každých 2,0 s) a zobrazuje něco jako:

Every 2.0s: ls -sh1 /path/to/target                                      
Tue Jan 12 15:02:45 2016

total 1.1G
4.0K data
130M tmp1.txt
137M tmp2.txt
151M tmp3.txt
168M tmp4.txt
162M myFile
9
muelleth

Ahoj Dalším způsobem, jak ukázat přenosovou rychlost, je použití scp na localhost, jako je tento:
scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

Zde je skript, který používá du ke sledování propustnosti. Toto je více agnostické pro aplikaci a je také odkazováno na https://unix.stackexchange.com/a/301490/183269 . Spusťte skript na cílovém hostiteli.

monitorio () {
# show write speed for file or directory
    interval="10"
    target="$1"
    size=$(du -ks "$target" | awk '{print $1}')
    firstrun="1"
    echo ""
    while [ 1 ]; do
        prevsize=$size
        size=$(du -ks "$target" | awk '{print $1}')
        #size=$(ls -l "$1"  | awk '{print $5/1024}')
        kb=$((${size} - ${prevsize}))
        kbmin=$((${kb}* (60/${interval}) ))
        kbhour=$((${kbmin}*60))
        # exit if this is not first loop & file size has not changed
        if [ $firstrun -ne 1 ] && [ $kb -eq 0 ]; then break; fi
        echo -e "\e[1A $target changed ${kb}KB ${kbmin}KB/min ${kbhour}KB/hour size: ${size}KB"
        firstrun=0
        sleep $interval
    done
}

příklad použití:

[email protected]:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
[email protected]:~$ monitorio /tmp/zero
/tmp/zero changed 4KB 24KB/min 1440KB/hour size: 4164KB
/tmp/zero changed 9168KB 55008KB/min 3300480KB/hour size: 13332KB
/tmp/zero changed 9276KB 55656KB/min 3339360KB/hour size: 22608KB
/tmp/zero changed 8856KB 53136KB/min 3188160KB/hour size: 31464KB
^C
[email protected]:~$ killall dd; rm /tmp/zero
1
gesell