cp로 파일을 복사 할 때 전송 진행률과 속도를 표시하는 방법은 무엇입니까?


답변:


249

하지만 cp이 기능이 없어, 당신이 사용할 수있는 pv이 작업을 수행 :

pv my_big_file > backup/my_big_file

참고 :이 방법은 파일의 권한과 소유권을 잃게됩니다. 이 방법으로 복사 한 파일은 사용자가 직접 생성 한 파일과 동일한 권한을 갖습니다.

이 예제에서는 pv기본적으로 파일을 stdout *로 출력하고 >연산자를 사용하여 파일로 리디렉션합니다 . 동시에 진행 상황에 대한 정보를 터미널에 인쇄합니다.

이것은 다음과 같습니다

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

시스템에  pv (또는을 입력 sudo apt-get install pv) 를 설치 해야 할 수도 있습니다.


* : 기술적 인 비트

유닉스 계열 시스템에는 stdout (표준 출력), stderr (표준 오류) 및 stdin (표준 입력)의 세 가지 중요한 데이터 스트림이 있습니다. 모든 프로그램에는 세 가지가 모두 있습니다. >리디렉션 연산자는 파일 프로그램 출력 리디렉션. 인수가 없으면 위에서 볼 수 있듯이 >프로그램의 표준 출력 을 파일로 리디렉션 합니다. cp기본적으로 더 멋진 것은 없습니다

cat source > destination

(여기서 cat파일을 읽고 stdout에 인쇄합니다). pvcat과 같지만 출력 스트림을 다른 곳으로 리디렉션하면 진행 정보를 대신 stdout으로 인쇄합니다.

한 번 봐 가지고 man pv그것에 대해 더 배울 수 있습니다.


대체 텍스트DoR 이이 답변 에서 제안한 다른 옵션 은 rsync를 대신 사용하는 것입니다.

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

진행률을 표시하면서 파일 권한 / 소유권을 유지합니다.


3
그것은 수도 있고 없음 (상황에 따라) 중요 할 수 있지만 pv같은 방법으로 권한을 처리하지 cp않습니다 ... (I 시도 하나 개의 빠른 테스트를 기반으로 : pv...에 걸쳐 실행 비트를 복사하지 않았다 rsync. 한
피터 .O

45
IMO : alias cp="rsync -avz"cp가 오래되었습니다.
Marco Ceppi

11
당신이 저 같이하고 잊어 경우 pv, 당신은에서 스누핑 갈 수 /proc/PID of cp/fd/proc/PID of cp/fdinfo진행 상황을 파악하기. (속도를 추론하는 것은 당신에게 달려 있습니다.) 저는이 기술을 사용하여 시청 updatedb합니다.
타나토스

11
예, -z아마도 네트워크 복사본에만 사용해야합니다. 로컬 사본에 대한 데이터 압축 및 압축 해제는 순수한 오버 헤드입니다.
Matthew 읽기

3
@MarcoCeppi, 디렉토리를 복사 할 때 소스 경로 rsync에 후행을 추가하지 않도록하십시오 /(또는 bash 완료가 자동으로 배치되면 제거하십시오). 그렇지 않으면 cp(또는 gcp)를 사용할 때와 다른 결과가 나타납니다 .
Piotr Findeisen

185

없습니다. 이유는 여기 를 참조 하십시오 . 필요한 것 이상 rsync으로 --progress매개 변수가 있습니다. 는 -a등의 권한을 유지하며, -h사람이 읽을 수있을 것입니다.

rsync -ah --progress source destination

결과는 다음과 같습니다.

Pictures/1.jpg
      2.13M 100%    2.28MB/s    0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
      1.68M 100%    1.76MB/s    0:00:00 (xfr#5899, to-chk=0/5905)

4
이것은 현재 우분투 (14.10)에서 훌륭하게 작동합니다. 또한 -r디렉토리를 재귀 하는 플래그를 지원합니다 . cp를 직접 대체 할 수도있다 :alias cp="rsync -ah --progress"
rustyx

1
시스템에 포함 된 도구를 사용할 수 있다는 점에서 OS X에서 작동합니다.
Ivan X

3
내가 rsync를 설치하는 표준의 일부입니다 특별히 때문에, 태양 광 발전에 비해이 대안이 더 좋아
주앙 코스타

1
@bartekbrak 공유해 주셔서 감사합니다. 현재 rsync 3.1.2의 homebrew 버전을 실행하는 macOS 10.12.x에서 사용 --progress하고 있습니다. 따라서 AOL ​​키워드 검색에서 오는 사람들은 rsync -ah --info=progress2 [source] [destination] IMHO와 같은 좀 더 깔끔한 방식으로 결과를 보여줍니다.
ipatch

2
불행히도 많은 작은 파일을 복사 할 때 출력이 크게 도움이되지 않습니다.
Raphael

89

당신은 당신의 파일을 올바르게 사용할 수 전송하는 경우 보려면 gcpgcpCP 비슷하지만 복사되는 것을 볼 수 있도록 기본적으로 당신에게 진행률 표시 줄을 제공합니다. 프로그램의로서 위키 노트 , gcp다음과 같은 몇 가지 유용한 기능을 가지고 있습니다

  • 전송 진행 표시
  • 오류 발생시 연속 복사 (다음 파일로 건너 뛰기)
  • 복사 상태 로깅 : gcp는 성공적으로 복사 된 파일을 알 수 있도록 모든 작업을 기록합니다.
  • 대상 파일 시스템 제한을 처리하기위한 이름 변경 (예 : FAT에서 호환되지 않는 문자 "*"또는 "?"삭제)

그러나 도구를 사용할 때 진행률 표시 줄이 100 %에 도달하더라도 미디어를 안전하게 제거하기 전에 터미널 프롬프트가 다시 나타날 때까지 기다려야 전송 프로세스가 성공적으로 완료됩니다.

gcp파일을 복사하는 데 사용되며 --preserve다양한 속성과 권한을 유지하고 --recursive전체 디렉토리를 복사 할 수있는 옵션이 있습니다. 옵션에 대한 자세한 내용 man gcpUbuntu 맨 페이지를 온라인 으로 입력 하거나 참조하십시오 . 이 사이트 에서도 튜토리얼을 이용할 수 있습니다 .

gcp리포지토리에서 설치

sudo apt-get install gcp

( 참고 : Ubuntu 12.10에서 새로운 자동 마운트 지점은 예를 들어 /media/user/usbdisk)입니다.

다음을 입력하여 파일을 미디어에 복사 할 수 있습니다

gcp /home/mike/file.mp4 /media/usb

와 폴더를 미디어에 복사

gcp -rv ~/Podcasts /media/Mik2

gcp진행률 표시 줄 을 사용한 샘플 출력 :

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

물론 디스크에 복사 할 파일이나 폴더를 여러 개 지정할 수 있으며, 여기에서 다루는 다른 옵션이 많이 있습니다 man gcp.


4
ssh를 통해 함께 오류가 발생했습니다dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
msa7

3
머신에 X11 디스플레이가 열려 있으면 export DISPLAY=:0.0gcp를 시작하기 전에 설정할 수 있습니다 . 만약 머신이 헤드리스라면 가상 프레임 버퍼 또는 다른 것으로 xsession을 시작해야합니다. 그 시점에서 아마도 다른 프로그램을 찾아야합니다
user292067

2
gcp꽤 괜찮지 만 DBUS / X 요구 사항은 이상합니다. ssh forwarding을 사용하여 SSH를 통해이를 처리 ssh -X user@host했습니다.
Oli

68

이 정확한 목적으로 cURL을 사용하여 시작됩니다. 매뉴얼 페이지에는 "FILE"프로토콜이 지원되는 것으로 표시되므로 URL의 다른 프로토콜처럼 사용하십시오.

curl -o destination FILE://source

속도, 진행률, 남은 시간 등 모두 익숙한 형식으로되어 있습니다.


1
이는 새 도구를 설치할 수없고 rsync를 사용할 수없는 환경에서 특히 유용합니다.

5
훌륭합니다, 이것은 반드시 알려진 핵일 것입니다!
ionreflex

좋은 대답입니다! 영리한!
9301293

이것은 아마도이 같은 단점 등을 pv그 권한을 저장하지 않습니다.
Ploni

1
단! 디렉토리 에서이 작업을 수행 할 수있는 방법이 있습니까?
Joseph Rajeev Motha

28

속도가 표시되지 않지만 여러 파일을 복사 할 때 명령에 대한 -v옵션 cp은 진행 정보를 제공합니다. 예 :

cp -rv old-directory new-directory

10
진행 정보? 이것은 단지 장황한 출력입니다. 진행 정보를 제공하려면 최소한 몇 개의 파일 또는 심지어 어떤 파일을 복사해야하는지 알아야합니다.
줄리안 F. 와인 너트

파일이 어떤 파일인지 표시하며 덜 까다로운 경우에 충분할 수 있습니다.
Gringo Suave

20

커널은 속도 및 종종 백분율과 같은 대부분의 데이터를 알고 있습니다. 최신 커널은 / proc 파일 시스템을 통해이를 공개합니다.

https://github.com/jnweiger/showspeed의 showspeed 가 해당 정보를 사용합니다. 이미 실행중인 프로그램에 연결하여 다음과 같이 정기적으로 업데이트 할 수 있습니다.

$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB)  9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB)  8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB)  8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB)  7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB)  7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB)  7m:18
p/4417/fd/1w /tmp/otherbigfile  67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...

좋은데 그래도 백분율을 어떻게 계산합니까? 파일이 읽기 전용으로 열린 경우에만 추측합니다. 액세스가 분산 된 경우에는 작동하지 않을 수 있습니다.
j_kubik

1
이 경우 당신은 또한 실행하는 다른 터미널을 사용할 수 pkill -USR1 dd있도록 dd상태를 보여주는 또 다른 옵션이 될 것 watch -n 1 pkill -USR1 dd주기적으로 진행 상황을 보여줍니다 (초마다) 할 수 있습니다.
Yaron

권리. 많은 도구가 시간이 지남에 따라 통계를보고하는 기본 방법을 가지고 있습니다. dd도 예외는 아닙니다. 최신 구현에는 status = progess 옵션이 있습니다. Showspeed는 pv와 마찬가지로 고전적인 유닉스 스타일의 "한 가지 목적을위한 하나의 도구"솔루션입니다. 그러나 다른 사용 사례가 있습니다. 컵이 고스트 스크립트를 통해 파일을 펌핑하거나 진행중인 cp 또는 tar에 대한 ETA를 알고 자합니다. 몇 시간 후에 이미 95 %가 완료되었을 수 있으며 pv를 추가하기 위해 다시 시작하고 싶지 않을 것입니다 ... 흩어진 액세스가 제대로 작동하지 않습니다. Showspeed 만 샘플 위치를 찾습니다.
Jürgen Weigert

18

progress리포지토리에는 다양한 명령을 검사하고 진행률 정보를 표시 할 수 있는 도구 가 있습니다.

명령을 사용하여 설치하십시오

sudo apt-get install progress

이 도구는 다음과 같이 사용할 수 있습니다.

cp bigfile newfile & progress -mp $!

산출:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)

12

동안이 pv지역을 처리 할 수 cp사용, 작업 ddpv로컬 (처리 수 cp) 및 원격 ( scp) 작업.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

path/to/dest.mkv의해 출구를 확인하십시오touch path/to/dest.mkv

진행률을 표시 할 수 있지만 백분율 정보를 원할 경우

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

교체 100M소스 파일의 실제 크기 위.

여기 원격 부분이 온다

동안은 scp거의 사용, 현재 진행률을 표시 할 수 없습니다 ddpv케이크 한 조각이다.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv


11

실행중인 명령과 관련된 설명자를 찾고 진행률과 속도를 표시 할 수있는 cv라는 새로운 도구가 있습니다 : https://github.com/Xfennec/cv

cv -w

실행중인 모든 cp, mv 등의 작업에 대한 통계를 출력합니다.


watch cv -q
깨끗합니다

개별 파일의 진행률 만 표시하며 a cp가 디렉토리를 재귀 적으로 복사 하는지 여부를 인식합니다 .
Flimm

1
전쟁이 진행되도록 이름이 바뀌 었습니다. 훌륭한 도구!
sebastian 2016 년

7

많은 사람들이 말했듯이 cp에는이 기능이 포함되어 있지 않습니다.

단지 $ 0.02를 던지기 위해, 나는 보통 사소한 복사 상황에서 무엇을합니까 (즉 no -R) :

  1. 파일이 얼마나 큰지 확인하고 기억하십시오

  2. 복사 시작

  3. 다른 터미널을여십시오

  4. watch ls -lh DIR대상이있는 디렉토리에서 실행하십시오 .

이렇게하면 최소한의 번거 로움없이 대상 파일 크기를 계속 업데이트 할 수 있습니다.

디렉토리를 재귀 적으로 복사하는 등의 사소한 상황에 대한 대안 watch du -hs DIR으로 DIR 크기의 요약을 볼 수 있습니다 . 그러나 du는 계산 시간이 오래 걸리고 복사 속도가 느려질 수 있으므로 -n INTERVAL인수를 사용 하여 트레이드 오프를 수용 할 수 있습니다.

업데이트 : watch du와 함께 사용되는 명령과 함께 와일드 카드를 사용하는 경우 (예 watch du -hs backup/*: 인용하는 것을 잊지 마십시오)

watch "du -hs backup/*"

그렇지 않으면 시계가 시작될 때 와일드 카드가 한 번만 확장 되므로 du는 새 파일 / 하위 디렉토리를 보지 않습니다.


"속도"부분은 대답하지 않습니다 ...
Alois Mahdal

7

dd status=progress

GNU Coreutils 8.24+ (Ubuntu 16.04)에 추가 된 옵션 :

dd if=src of=dst status=progress

터미널은 다음과 같은 유형의 라인을 보여줍니다.

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

참조 : 어떻게 당신이 DD의 진행 상황을 모니터링 할 수 있습니까?


1
의미 : stdout은 터미널 이 주기적으로 업데이트되는 줄을 표시 하는 문자 스트림과 vt100 이스케이프 시퀀스입니다 . 표준 출력은 항상 바이트 스트림이며, (응용 프로그램이 ... 그것은 현재 터미널 여부에 부착되어 있는지 여부를 알 수 있다는 점을 제외)가 표시되는 방법을 함께 할 수 없다
masterxilo

@masterxilo newbs는 신경 쓰지 않을 것입니다, 전문가들은 알게 될 것입니다 ;-) hehe
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

글쎄, 나는 항상 그런 것들을 진술하는 것이 좋다고 생각합니다. 아마도 세부 사항을 남기지 않을 수도 있지만 독자가 잘못된 정신 모델을 만들지 않도록하십시오. "stdout은 (정기적으로 업데이트 된) 라인"이라고 말하면 stdout이 변경 불가능한 메모리 블록이라고 말하는 것 같습니다. 초보자도 아는 것이 중요합니다.
masterxilo

6

rsync 3.1 이상 ( rsync --version)이있는 경우 권한과 소유권을 유지하면서 디렉토리를 복사 (cp -Rpn)하고 "클러버 없음"을 반복하며 전체 파일 진행률 (파일 별 진행 대신), 복사 속도 및 ( 남은 예상 시간 :

sudo rsync -a --info=progress2 --no-i-r /source /destination

sudo는 소유하지 않은 디렉토리 / 파일을 처리하는 경우에만 필요합니다. 또한가 없으면 --no-i-r복사 중 어느 시점에서 백분율이 더 낮은 숫자로 재설정 될 수 있습니다. 아마도 rsync의 이후 버전은 info = progress2와 함께 no-ir로 기본 설정되지만 현재 버전 3.1.2에는 없습니다.

이미 파일이 포함 된 디렉토리에 복사 할 때 남은 백분율과 시간이 크게 과대 평가 된 것으로 나타났습니다 (예 : 일반적으로 cp -n "클러버 없음"을 사용하는 경우).


3

쉘 스크립트를 사용하십시오.

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}

이것은 다음과 같습니다

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

출처


3

원하는 작업에 따라 Midnight Commander ( mc)가 답이 될 수 있습니다. 아직 언급되지 않은 것에 놀랐습니다.

하나의 거대한 파일의 전송 진행률을 표시 pv하거나 rsync표시하는 데 유용한 도구 이지만 전체 디렉토리 / 트리를 복사 할 때 mc크기를 계산 한 다음 진행률을 매우 잘 표시합니다. 또한 대부분의 시스템에서 즉시 사용할 수 있습니다.


2
"대부분의 시스템에서 즉시 사용할 수 있습니다." ... 기본 우분투 설치에는 없습니다.
muru

1

속성을 유지하는 또 다른 옵션은 다음과 같습니다 ( source폴더 인 경우에 생성됨 destination).

tar -c source | pv -e -t -p -r | tar -C destination  -x

누군가에게 유용 할 수 있기를 바랍니다. 전송 시간을 예상하려면이 do -s source를 사전 에 수행하고 이를 -s <size>매개 변수로 전달하여 달성 할 수 있습니다 pv.


-f -중복됩니다. tar의 기본 출력 c및 입력 x은 stdout 및 stdin입니다.
muru

OS / tar 버전에 따라 다를 수 있습니까? 우분투 사이트라는 것을 알고 있지만 이것은 macOS와 같은 다른 OS 소유자에게 유용 할 수 있습니다
ciekawy

1
아니. macOS가 사용하는 libarchive의 tar를 포함한 모든 제정신 구현에는이 동작이 있습니다.
muru

방금 macos에서 확인되었으며 제안이 완벽하게 유효합니다. 답변을 업데이트했습니다. 감사!
ciekawy

0

모든 프로그램을 사용하여 복사 할 수 있습니다. 동시에, sudo iotop실제로 디스크 읽기 / 쓰기 속도를 시작 하고 진행할 수 있습니다.


0

아래 git 저장소에서 progress_bar에 대한 소스 코드를 확인하십시오.

https://github.com/Kiran-Bose/supreme

또한, 사용자 정의 bash는 스크립트 패키지를 시도 최고

deb 파일을 다운로드하고 데비안 기반 배포판에 설치하거나 소스 파일을 다운로드하고 다른 배포판에 수정 및 사용하십시오

기능 개요

(1) 오픈 앱 ---- Firefox ---- 계산기 ---- 설정

(2) 파일 관리 ---- 검색 ---- 탐색 ---- 빠른 액세스

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3) 전화 관리 ---- 전화에서 이동 / 복사 ---- 전화로 이동 / 복사 ---- 폴더 동기화

(4) USB 관리 ---- USB에서 이동 / 복사 ---- USB로 이동 / 복사


0

pv는 cp 또는 다른 어떤 것이 든 pid가 주어진 파일 설명자를 보는 방법을 알고 있습니다.

설명서에서 :

   (Linux only): Watching file descriptor 3 opened by another process 1234:

          pv -d 1234:3

   (Linux only): Watching all file descriptors used by process 1234:

          pv -d 1234

예:

md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============>                                 ] 29% ETA 0:00:53

$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov:  754MiB 0:00:04 [97,2MiB/s] [======================>                       ] 52% ETA 0:00:07
4:/media/windows/copy.mov:  754MiB 0:00:04 [97,3MiB/s] [     <=>                                                                   ] 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.