명령줄에서 "cp"를 실행할 때 전송 속도를 표시하시겠습니까? [복사]

명령줄에서 "cp"를 실행할 때 전송 속도를 표시하시겠습니까? [복사]

가능합니까?

답변1

표준 coreutils cp명령은 이 기능을 지원하지 않습니다. 다른 버전에 추가하기 위한 Gentoo 패치가 작업 중이지만, 어떤 이유로든 Coreutils 6.10 버전은 더 이상 포함되지 않습니다.버그질라에서, 그리고 주변에 다른 사람들도 많이 있을 거라고 확신해요.

패치를 원하지 않으면 cp다른 명령을 사용해야 합니다. 예를 들어, 다음과 같은 작업을 수행할 수 있는 플래그가 rsync있습니다 .--progress

rsync --progress source destination

데이터를 복사한 다음 stdout을 대상(예: cat source > destination)으로 리디렉션하는 대신 파이프 처리량을 측정하는 프로그램을 사용하여 중간( cat source | SOME-PROGRAM > destination)에 삽입할 수 있습니다.이 관련 질문. 제가 추천하는 곳은 바로PV(파이프라인 뷰어):

pv 홈페이지의 pv 스크린샷

플래그를 지정하면 --rate전송 속도가 표시됩니다.

답변2

나는 pv를 이런 식으로 사용하는 것이 이 목적에 적합하다는 것을 알았습니다.

pv -p file1 > file2

스위치에는 -p파일 전송 진행 상황이 표시됩니다. 전송 속도를 보려면 -r스위치를 추가하세요. 일정 기간 동안의 평균 전송 속도를 보려면 이 -a스위치를 사용할 수 있습니다.

pv -pra file1 > file2

답변3

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

실제로 속도를 표시하고 싶지 않고 대용량 파일을 복사할 때 어떤 일이 발생하는지 확인하려는 경우 다음 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

답변4

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
}

사용 예:

user@host:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
user@host:~$ 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
user@host:~$ killall dd; rm /tmp/zero

관련 정보