it-swarm-vi.com

Hiển thị tốc độ truyền khi thực hiện "cp" từ dòng lệnh?

Điều này có thể không?

50
Chris

Lệnh coreutils cp không hỗ trợ điều này. Có một bản vá Gentoo nổi xung quanh bổ sung nó cho các phiên bản khác nhau, mặc dù vì lý do nào đó nó không được đưa vào Gentoo nữa; phiên bản cho coreutils 6.10 là trong bugzilla của họ , và tôi chắc chắn có rất nhiều người khác ở xung quanh.

Nếu bạn không muốn vá cp, bạn cần sử dụng một số lệnh khác. Ví dụ: rsync--progress cờ, vì vậy bạn có thể làm:

rsync --progress source destination

Nếu thay vì sao chép, bạn gửi dữ liệu và sau đó chuyển hướng thiết bị xuất chuẩn đến đích (tức là cat source > destination), sau đó bạn có thể sử dụng chương trình đo thông lượng đường ống và chèn nó vào giữa (cat source | SOME-PROGRAM > destination); có một cặp đôi được đề cập trong câu hỏi liên quan này . Người tôi khuyên nên có pv (Trình xem ống):

Screenshot of pv from the pv homepage

Nếu bạn cho nó --rate cờ nó sẽ hiển thị tốc độ truyền

53
Michael Mrozek

Tôi thấy rằng sử dụng pv theo cách này hoạt động tốt cho mục đích đó

pv -p file1 > file2

Các -p switch hiển thị tiến trình chuyển tập tin. Để xem tốc độ truyền, thêm -r công tắc điện. Nếu bạn muốn xem tốc độ truyền trung bình theo thời gian, bạn có thể sử dụng -a công tắc điện.

pv -pra file1 > file2
17
Patrick

Tôi biết điều này khá cũ, nhưng ...

Nếu bạn không thực sự muốn hiển thị tỷ lệ, nhưng chỉ muốn xem nếu có điều gì đó xảy ra khi sao chép một tệp lớn, bạn cũng có thể sử dụng lệnh watch (cũng hoạt động với mv ):

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

Sau đó, trong một Shell khác hoặc đẩy lệnh sao chép xuống nền (ví dụ: với Ctrl + Z theo sau là bg), bạn có thể kiểm tra kết quả bằng:

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

Điều này sẽ liên tục cập nhật đầu ra của cập nhật lệnh ls (theo mặc định mỗi 2.0 giây), hiển thị một cái gì đó như:

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

Xin chào Một cách khác để hiển thị tốc độ truyền là sử dụng scp trên localhost như thế này:
[.__.] scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

Đây là tập lệnh sử dụng du để theo dõi thông lượng. Đây là bất khả tri ứng dụng nhiều hơn và cũng được tham chiếu trong https://unix.stackexchange.com/a/301490/183269 . Thực thi tập lệnh trên Máy chủ đích.

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
}

ví dụ sử dụng:

[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