it-swarm-ko.tech

명령 행에서 "cp"를 수행 할 때 전송 속도를 표시합니까?

이것이 가능한가?

50
Chris

표준 coreutils cp 명령은이를 지원하지 않습니다. 젠투 패치는 여러 가지 버전으로 추가되어 있지만 어떤 이유로 더 이상 젠투에 포함되어 있지는 않습니다. coreutils 6.10의 버전은 bugzilla에 있음 이며, 다른 많은 것들이 있다고 확신합니다.

cp를 패치하지 않으려면 다른 명령을 사용해야합니다. 예를 들어 rsync에는 --progress 플래그이므로 다음을 수행 할 수 있습니다.

rsync --progress source destination

복사하는 대신 데이터를 정리 한 다음 stdout을 대상 (예 : cat source > destination) 파이프 처리량을 측정하고 중간에 삽입하는 프로그램을 사용할 수 있습니다 (cat source | SOME-PROGRAM > destination); 이 관련 질문 에 언급 된 부부가 있습니다. 내가 추천 한 것은 pv (파이프 뷰어)입니다.

Screenshot of pv from the pv homepage

당신이 그것을 제공하면 --rate 플래그는 전송 속도를 보여줍니다

53
Michael Mrozek

이런 식으로 pv를 사용하면 그 목적에 잘 맞는다는 것을 알았습니다.

pv -p file1 > file2

-p 스위치는 파일 전송 진행률을 보여줍니다. 전송 속도를 보려면 -r 스위치. 시간이 지남에 따른 평균 전송률을 보려면 -a 스위치.

pv -pra file1 > file2
17
Patrick

나는 이것이 다소 오래되었다는 것을 알고 있지만 ...

실제로 속도를 표시하지 않고 큰 파일을 복사 할 때 어떤 일이 일어나고 있는지 확인하려는 경우 watch 명령을 사용할 수도 있습니다 (mv ) :

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

그런 다음 다른 셸에서 또는 복사 명령을 배경으로 밀어 넣으십시오 (예 : Ctrl + Z 다음에 bg) 다음과 같이 결과를 확인할 수 있습니다.

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

이렇게하면 ls 명령 업데이트 (기본적으로 2.0마다)의 출력이 지속적으로 업데이트되어 다음과 같이 표시됩니다.

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

Hi 전송 속도를 보여주는 또 다른 방법은 다음과 같이 localhost에서 scp를 사용하는 것입니다.
scp -rv src_folder [email protected]:/dest_folder

5
Christoph Kuhr

다음은 du를 사용하여 처리량을 모니터링하는 스크립트입니다. 이것은 더 응용 프로그램에 독립적이며 https://unix.stackexchange.com/a/301490/183269 에서 참조됩니다. 대상 호스트에서 스크립트를 실행하십시오.

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
}

사용 예 :

[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