it-swarm-id.com

Tampilkan kecepatan transfer saat melakukan "cp" dari baris perintah?

Apakah ini mungkin?

50
Chris

Coreutils standar cp perintah tidak mendukung ini. Ada tambalan Gentoo yang beredar yang menambahkannya untuk versi yang berbeda, meskipun tidak termasuk dalam Gentoo lagi karena alasan tertentu; versi untuk coreutils 6.10 adalah di bugzilla mereka , dan saya yakin ada banyak yang lain di sekitar.

Jika Anda tidak ingin menambal cp, Anda perlu menggunakan beberapa perintah lain. Misalnya, rsync memiliki --progress flag, sehingga Anda dapat melakukan:

rsync --progress source destination

Jika alih-alih menyalin data Anda pada kucing dan kemudian mengarahkan stdout ke tujuan (mis. cat source > destination), maka Anda dapat menggunakan program yang mengukur throughput pipa dan memasukkannya di tengah (cat source | SOME-PROGRAM > destination); ada pasangan yang disebutkan dalam pertanyaan terkait ini . Yang saya sarankan ada pv (Pipe Viewer):

Screenshot of pv from the pv homepage

Jika Anda memberikan --rate tandai itu akan menunjukkan tingkat transfer

53
Michael Mrozek

Saya menemukan bahwa menggunakan pv dengan cara ini berfungsi dengan baik untuk tujuan itu

pv -p file1 > file2

-p switch menunjukkan progres transfer file. Untuk melihat kecepatan transfer, tambahkan -r beralih. Jika Anda ingin melihat rata-rata kecepatan transfer dari waktu ke waktu, Anda dapat menggunakan -a beralih.

pv -pra file1 > file2
17
Patrick

Saya tahu ini agak tua, tapi ...

Jika Anda tidak benar-benar ingin menampilkan laju, tetapi hanya ingin menonton jika ada sesuatu yang terjadi saat menyalin file besar, Anda juga dapat menggunakan perintah watch (juga berfungsi dengan mv ):

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

Lalu, di Shell lain, atau mendorong perintah salin ke latar belakang (mis. Dengan Ctrl + Z diikuti oleh bg), Anda dapat memeriksa hasilnya dengan:

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

Ini akan terus memperbarui hasil pembaruan perintah ls (secara default setiap 2.0s), menampilkan sesuatu seperti:

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

Hai Cara lain untuk menunjukkan kecepatan transfer adalah dengan menggunakan scp di localhost seperti ini:
scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

Berikut ini adalah skrip yang menggunakan du untuk memonitor throughput. Ini lebih agnostik aplikasi dan juga direferensikan di https://unix.stackexchange.com/a/301490/183269 . Jalankan skrip pada Host tujuan.

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
}

contoh gunakan:

[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