cp 속도와 퍼센트가 복사되는 것을 볼 수 있습니까?


251

노틸러스를 사용하여 대용량 파일을 복사 할 때 문제가 있습니다 (정지됨). 를 사용하여 복사해야합니다 cp. 복사 된 %와 전송 속도를 나타내는 매개 변수가 있는지 알고 싶습니다.


39
rsync대신에 사용할 수 있습니다 cp. 그것은이 --progress옵션을 선택합니다.
frostschutz

2
Midnight Commander또한 잘 작동하며 진행률 표시 줄이있는 예쁜 텍스트 기반 UI가 있지만 설치되지 않을 수 있습니다. mc명령 프롬프트에서 시도하십시오 . 또한 분명히 그렇지 않습니다 cp.
CVn

3
rsync와 함께 사용하면 --progress무슨 일이 일어나고 있는지 알 수 있습니다. 100 %에 도달하면 멈추고 몇 분 동안 지속됩니다. 나는 노틸러스에서 일어나는 것과 동일하다고 생각합니다. 어쨌든 그것은 이미 다른 질문 이므로이 질문에 대한 가장 좋은 대답 rsync --progress은 크기, %, 속도 및 경과 시간을 보여줍니다.
yzT

2
rsync의 한 가지 문제점은 순수 사본보다 느리게 실행된다는 것입니다. 내 큰 서버에서 차이는 각각 60MB / s와 300MB / s입니다.
pdwalker

1
-W옵션 이있는 @pdwalker ? 내 모든 호스트 rsync에서 거의 빠르다 cp. 그래서 나는 rsync대신 정기적으로 사용한다 cp.
Skaperen

답변:


193

rsyncprogress2전체 백분율을 나타내는 이라는 플래그가 있습니다 .

rsync --info=progress2 source dest

5
--info = progress2는 여전히 기본 저장소로 만들지 않았으며 여기서는 2015입니다. 좋은 생각입니다.
Lonniebiz

1
--info=progress2마침내에 포함되었습니다 version 3.1.0 protocol version 31. 어쩌면 당신은 당신의 답변을 편집 할 수 있습니다, yzT.
Sopalajo de Arrierez

1
--info=progress2그 rsync가 빠르게 타오르는 것을 알았습니다 ! 200MB / s, Windows는 90MB / s를 넘지 않습니다!
ReneFroger

1
@ReneFroger 비록 실제 속도 (장치에 따라 다름) 일 수도 있지만 Linux에서는 빠른 속도가 실제로 잘못된 경우가 많으며 복사가 완료된 후 Windows에서 장치를 추출 할 수있는 것과 달리 시스템은 여전히 ​​장치에 쓰고 있습니다 거의 즉시. 큰 파일을 복사하면 빠른 속도로 시작하는 방법을 알 수 있지만 표준 파일까지 내려갑니다.
yzT 2016 년

7
그것은 단지 나를 위해 일했습니다 --progress. rsync 버전 3.0.9
adrianTNT

103

당신 cp이 확실히 다른 도구를 허용한다면 가능합니다. 단일 파일의 경우을 사용할 수 있습니다 pv. 좋은 통계를 제공하는 작은 도구입니다.

pv inputfile > outputfile

파일이나 디렉토리가 여러 개인 경우 tar를 사용할 수 있습니다.

tar c sourceDirectory | pv | tar x -C destinationDirectory

쉘 함수로 랩핑 할 수 있습니다. 타이핑하는 것이 적고 시맨틱이에 가깝습니다 cp. 다음은 매우 간단한 (오류 방지 기능이 아님) 기능입니다.

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

일부 버전은 tar위에서 언급 한 구문 (예 : Solaris tar)을 지원하지 않으므로 다음 변형을 사용해야합니다.

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

당신은 이것을 이렇게 부릅니다

cpstat sourceDirectory destinationDirectory

pv남은 시간을 추정 할 수 있도록 추가로 향상시킬 수 있습니다 .

주석에 언급 된 frostschutz와 같은 다른 솔루션은 rsync를 --progress옵션 과 함께 사용하는 것입니다.

rsync --progress -a sourceDirectory destinationDirectory

1
cpstat는 pastebin에 들어갑니다 =)
Matt

7
이것은 pv파이프를 통해 얼마나 많은 데이터가 올지 알지 못 하기 때문에 전송 속도를 제공하지만 ETA 는 아닙니다. 을 사용하여 지정할 수 있습니다 -s. 예 : 먼저 할 du -sh sourceDirectoryA (거친) 아이디어를 얻을 다음에 전달할 pv다음과 같이 : pv -s 100m.
Jan Fabry

1
--info = progress2는 디렉토리 수준 진행 통계를 제공합니다.
AlexLordThorsen

vbuf(데비안, 우분투) 좋은 조금 더 빠른 것보다 pv아마도 때문에 가상 링 버퍼,
Skaperen

@Skaperen 몰라요 vbuf. 그러나 현재 데비안에서는 불안정한 것으로 보이므로 일반적으로 데비안 스 테이블을 실행하는 서버에서는 종종 사용할 수 없습니다.
Marco

58

rsync 복사 진행 중 진행률을 표시하는 데 가장 적합합니다.

전의:

rsync -avh --progress sourceDirectory destinationDirectory

27

다른 답변에서 설명했듯이 cp는 해당 기능을 제공하지 않습니다. 그러나 진행률 (이전의 cv) 은이 누락 된 기능을 제공하는 데 매우 유용한 작은 도구입니다.

이 도구는 시스템에서 현재 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat, ...)을 찾고 복사 된 백분율을 표시하는 Tiny Dirty Linux Only * C 명령으로 설명 할 수 있습니다. 데이터.

나는 지난 몇 달 동안 그것을 사용해 왔으며 견고합니다.


모든 파일 시스템 (예 : cifs)에서 작동하지 않는 것 같지만 +1, 그러한 미친 팅 종료를
몰랐습니다

1
이 프로젝트는 이제 "progress-Coreutils Progress Viewer (이전의 cv)"라고합니다.
chappjc

17

cp 속도와 퍼센트가 복사되는 것을 볼 수 있습니까?

예, cp터미널에 명령 진행 상황을 표시 할 수 있습니다 .


방법 # 1 : (사용 progress)

새 터미널을 열고 입력 progress하면 cp다음과 같은 명령 진행률 및 기타 명령 이 표시 됩니다.

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

를 설치하지 않은 경우 다음 명령 progress을 사용하여 리포지토리에서 설치할 수 있습니다 .CentOSyum -y install progress

그런 다음 cp백그라운드에서 명령 을 실행 한 후 또는 cp정상적으로 실행 한 후 다른 터미널을 열려면 다음 명령을 시도하십시오.

# progress -m

출력 참조 :

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

방법 # 2 : (패치 사용 cp)

또는 GNU를 다운로드하여 coreutils패치하십시오.

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

운영:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

두 개의 파일을 복사 cp하고 mv아래에 loacated coreutils-8.21/src/에를 /usr/local/bin:

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

또는 파일 관리자를 루트로 사용하여 복사하십시오.

에 다음 줄을 추가하십시오 ~/.bashrc.

alias cp='cp -gR'
alias mv='mv -g'

로그 아웃 및 로그인

진행률 표시 줄은 작성자가 권장 하지 –g않거나 표시하지 않고 표시 할 수 있습니다.–progress-bar

출력 참조 :

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

출처 : linuxhelp


1
이것은 cp패치 의 실제 소스 인 것 같습니다 : web.archive.org/web/20131115171331/http://beatex.org/web/…
Kaushal Modi

1
progress명령 에 대한 힌트 +1
Peter

이것이 유일한 해답입니다
Alessio

14

이 게시물이 다소 오래된 것으로 나타났습니다. 그러나 현재 문제에 대한 해결책을 만들면서 해결책을 게시 할 것이라고 생각했습니다.

시나리오 : 복사하려는 디렉토리 구조가 매우 커서 하나의 터미널 창에서 cp -R sourcedir destdir 명령을 실행합니다.

다른 터미널 창을 열거 나 프로세스를 백그라운드로 푸시 (Ctrl+Z,bg<CR>)한 다음 진행률 표시기를 빈민가 방식으로 만듭니다.

먼저 복사하려는 디렉토리 구조의 전체 크기를 얻습니다.

du -sh /path/sourcedirectory/

결과를 기가 바이트 (G)로 변환 한 다음 변수 sourcesize에있는 결과 대신 n을 대체하십시오. sourcesize 및 destdir (대상 디렉토리)을 삽입 한 후 아래 명령을 실행하십시오.

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

10 초마다 진행률이 다음과 같은 메시지와 함께 인쇄됩니다.

0.100% completed
0.200% completed
0.300% completed 
... etc

이 솔루션은 복사 속도를 해결하지 못했지만 위의 명령을 확장하여 bash 스크립트로 만들면 더 쉽게 읽을 수 있습니다. 예를 들어 복사되는 데이터 양을 확인하여 pr. n 시간 단위에서 속도는 계산 및 표시하기에 사소한 것이어야합니다.


이것은 실제로 내 유스 케이스에 완벽하므로 게시 해 주셔서 감사합니다! 하나의 파일뿐만 아니라 수천 개의 파일로 거대한 디렉토리를 복사하는 과정에 대해 알고 싶습니다. 다른 솔루션은 실제로 도움이되지 않습니다.
Ibrahim

특히 지금 당장 경험하는 것과 같은 경우에 유용합니다. 사전에 영향을 고려하지 않고 테라 바이트 단위의 백업을 하나의 스토리지 풀에서 다른 스토리지 풀로 이동하기 위해 원격으로 거대한 mv 작업을 시작했습니다. 이제 프로세스를 쉽게 배경으로 살펴볼 수 있습니다. 대박!
Riley

8

Marco의 답변을 향상시키기 위해 오늘이 버전의을 작성 cpstat했으므로 많은 디렉토리를 복사하고 마지막 매개 변수를 대상 경로로 사용할 수 있습니다. 상대 딥 경로를 소스로 사용하면으로 인해 tar동일한 종속 디렉토리 트리를 자동으로 작성할 수 있습니다 .

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}



5

rsync진행률 통계를 제공 하지만 진행률 표시 줄을 원하면을 사용해야합니다 pv.

디렉토리를 재귀 적으로 복사하는 데 사용할 수있는 구문과 유사한 구문으로보다 쉬운 구문 cpv의 래퍼를 사용할 수 있습니다.pvcp

여기에 이미지 설명을 입력하십시오

여기서 얻을 수 있습니다


에 대한 힌트는 +1입니다 pv. 좋은 발견!
피터

4

mc(자정 사령관) 과 같은 도구를 사용하면 다른 답변에 대한 대체 대안이 될 수 있습니다.

복사 / 이동 진행 상황을 보여주는 간단한 파일 관리자입니다.



4

또 다른 간단한 해결책은 다음과 같이 출력 폴더를 보는 것입니다.

Linux / Cygwin : watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

FreeBSD : gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>

이 편리한 유틸리티가 실행 du되어 차이점을 강조 표시합니다.

또 다른 잠재적 솔루션은 du처리량을 대략적으로 추정하고 호출 하여 반복하는 간단한 스크립트를 작성하는 것 입니다.


3

이 도구는 현재 시스템에서 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat 등)을 찾고 복사 된 데이터의 백분율을 표시하는 Linux 유틸리티 명령입니다.

https://github.com/Xfennec/cv


1
이것은 이미 'AmrMostafa에 의해 '14 년 11 월에 제안되었습니다.
Dubu

2

수신 파일 시스템의 FUSE 버그로 인해 cp가 다소 차단 된 경우가 있습니다.

cp에서 전환 할 수없고 (즉 --sparse = always 때문에) 실제로 진행하기에 신뢰할 수있는 것을 원하면 / proc을 통해 이동하십시오.

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0

0

VCP – curses 인터페이스에서 파일을 복사합니다 (Linux에서 진행률 표시 줄 표시).

설명 : vcp는 텍스트 만 출력 할 수있는 curses 인터페이스로 파일과 디렉토리를 복사합니다. 옵션과 출력은 새로운 기능을 추가하면서 BSD의 cp와 유사합니다.

다음에 대한 정보를 제공합니다.

  • 복사 및 복사 된 파일
  • 기록 된 데이터 및 총 데이터 크기
  • 매 초마다 기록되는 데이터
  • 두 개의 상태 표시 줄, 하나는 현재 파일 상태를 표시하고 다른 하나는 전체 총 상태 (1 개 파일을 제외하고 모두 표시) 및 백분율

출력이 콘솔로 전송 될 때 :

  • 상태 표시 줄
  • 복사 된 크기와 속도

VCP 매뉴얼 페이지 : https://linux.die.net/man/1/vcp

다음에서 vcp-2.2.tar.gz를 다운로드하십시오.

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

의존성 : curses.h (libncurses-dev).

우분투에서 다음을 설치하십시오 :

sudo apt-get install libncurses-dev

또는

sudo apt-get install libncurses5-dev

vcp 설치 :

make && make install

설명서:

man vcp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.