파일을 이동하고 진행률을 보는 방법 (예 : 진행률 표시 줄)은 어떻게합니까?


118

을 사용하여 큰 디렉토리를 이동할 때 mv진행률을 볼 수있는 방법이 있습니까 (%)? cpgentoo 의 명령 -g에는 진행 상황을 보여주는 스위치가 있습니다.


3
파일을 이동할 때 이러한 도구를 쉽게 사용할 수 있는지는 모르겠지만 쉘에서 파이프 처리량을 측정하는 것이 도움이 될 수 있습니다.
— Michael Mrozek

답변:


50

패치 된 cp 및 mv를 빌드 한 다음 둘 다 -g 스위치를 지원하여 진행률을 표시 할 수 있습니다. 이 페이지 에는 지침과 패치가 있습니다 . 그러나 : 페이지에서 지시합니다

$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv

원래 cp 및 mv를 덮어 씁니다. 여기에는 두 가지 단점이 있습니다. 첫째, 업데이트 된 coreutils 패키지가 시스템에 도착하면 덮어 씁니다. 둘째, 패치 된 버전에 문제가 있으면 표준 cp 및 mv에 의존하는 스크립트가 중단 될 수 있습니다. 차라리 이런 식으로 뭔가를하고 싶습니다 :

$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg

파일을 사용자가 컴파일 한 프로그램을위한 / usr / local / bin으로 복사하고 다른 이름을 지정합니다. 따라서 진행률 표시 줄을 원할 때 mvg -g bigfile /mnt/backup일반적으로 mv 를 말하고 사용합니다.

또한 진행률 표시 줄 alias mvg="/usr/local/mvg -g"을 말하고 mvg bigfile /mnt/backup직접 가져 오기 만하면됩니다.


2
불행히도“이 페이지”의 패치는 더 이상 존재하지 않으며 웹 아카이브에서 색인이 생성되지 않은 것으로 보입니다. 이름과 기능이 비슷한 패치 가 많이있는 것 같습니다. 답을 편집하여 어떤 패치 를 의미 할 수 있습니까?
— Gilles

내 생각 github.com/atdt/advcpmv는 그래서 그것을 가리 키도록 링크를 변경 유효한 후계자이며 동일한 패치가 있습니다.
— fschmitt

93

더 간단한 솔루션이있을 때 coreutil에서 바이너리를 덮어 쓰는 아이디어가 마음에 들지 않으므로 여기에 내 것이 있습니다.

rsync : Rsync는 파일을 복사 -P하고 진행률 표시 줄에 대한 스위치가 있습니다. 따라서 rsync를 설치 한 경우 쉘 도트 파일에 간단한 별칭을 사용할 수 있습니다.

alias cp='rsync -aP'

단점은 rsync가 cp보다 약간 느리지 만 시간이 지남에 따라 측정하고 자신을 결정해야한다는 것입니다.

셸 스크립트 : 셸 스크립트는 진행률 표시 줄을 만들 수도 있습니다. 나는 그물에서 이것을 얼마 전에 발견했고 그 출처를 기억하지 못한다.

#!/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% [===============================>                      ]

바 :

'bar'-ASCII 진행률 표시 줄이있는 'cat'

bar모든 종류의 작업 (cp, tar 등)에 대한 프로세스 표시 줄을 표시하는 작은 쉘 스크립트입니다. 프로젝트 홈페이지 에서 예제를 찾을 수 있습니다 .

또한 본 쉘을 위해 작성되었으므로 어디에서나 근처에서 실행됩니다.


3
barmv아직 랩핑하지 않습니다 .
— Tobu


1
참고 rsync대체하지 않습니다 mv이 같은 기록 중 복사 파일 시스템에 빠르게 복사에 관해서 특히, 완전히 (영업 이익에 대한 요구하고있다) btrfs.
— Karl Richter

74

라는 새로운 도구있다 progress실행중인 명령에 관련된 설명을 찾아 진행 상황과 속도를 표시 할 수 있습니다 : 가능 여기에

progress -w

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


3
와우, 나는 이것이 굉장한 것을 기대하지 않았다! progress설치 후 간단히 입력하면 mv현재 대기중인 명령에 대한 진행률이 표시 됩니다. 감사!
— jredd

3
감사! 루트로 물건을 옮길 때는 반드시 사용해야하는 것 같습니다 sudo(동일한 사용자) watch. 2 초마다 무슨 일이 일어나고 있는지 말할 수도 있습니다 .watch progress -w
— Wilf

6
멋진 프로그램이지만 예를 들어 파일이 많은 폴더를 이동하면 전체 파일이 아닌 현재 파일의 진행률 만 표시됩니다. 대신 watch progress -wprogress -m
— mxmlnkn을

6
IMHO, 이것이 문제를 해결하기위한 가장 유닉스적인 방법입니다. coreutils를 패치하거나 특정 목적 (mv의 rsync 등)으로 지정되지 않은 도구를 사용하거나 과도한 스크립트를 작성하는 대신, 주제를 위해 작성된 도구를 사랑으로 사용하십시오.
— Grief

34

파이프 뷰어 명령 pv을 사용 하여 진행률 표시 줄을 표시 할 수 있습니다 .

pv /original/file > /new/file

나는 종종 (결합 탑재 된 네트워크 파일 시스템을 통해 큰 파일을 복사하려면이 옵션을 사용 gzip하고 tar). 단점은 디렉토리가 아닌 하나의 파일 만 복사 할 수 있다는 것 입니다. 그리고 당신은 새 파일에 이름을 주어야합니다, 당신은 단지 같은 대상 디렉토리를 줄 수 없습니다 cp. 그러나 복사는 pv목적 이 아닙니다 . 이 도구는 강력한 도구이며 파일 복사 이상의 기능을 수행합니다. 의 더 많은 예는 홈페이지를 참조하십시오 pv.

더 나은 옵션은을 사용하는 것 rsync -aP입니다. 당신이 원하는 경우 mv대신, 플래그를 추가합니다 --remove-source-files. .bashrc명령을 자주 사용하려면 이것을 추가하십시오 .

alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'

여기의 단점은 rsync이며 진행률 표시 줄이 아닌 진행률 만 보여줍니다.


tar cf - source-dir | pv | tar xf - -C out-dir전체 디렉토리의 처리량을 제공합니다. 크기를 알고 -spv로 전달 하면 진행률을 높일 수 있습니다.
— arantius

6

진행률 표시 줄이있는 디렉토리를 이동 / 복사하지만 터미널이 아닌 GUI를 피하는 것이 목표 인 경우 mc (Midnight Commander)를 사용하는 것이 좋습니다.


3

내 해결책은을 사용하는 것 rsync입니다. 디렉토리를 복사하고 성공적으로 복사 한 후 소스 파일을 제거 (따라서 "이동")하고 진행률 보고서를 표시 할 수 있습니다 (특히 부분적으로 복사 된 디렉토리 동기화 및 네트워크 작업).

진행률 보고서와 함께 rsync를 사용하여 디렉토리를 이동하는 방법은 다음과 같습니다.

rsync -aP --remove-source-files $src $dst && rm -r $src

확인 $src않습니다 하지 , 그렇지 않으면 당신은 GNU보다 다른 의미를 얻을 것이다, 백 슬래시로 끝 cp.

rm -r때문에 말은 필요 --remove-source-files하나 하나가 성공적으로 디렉토리를하지 복사 한 후에 만이 소스 파일을 제거합니다. 는 &&rsync를 성공적으로 완료 경우에만 실행을 확인합니다. 당신이 편집증 환자 인 경우에, 당신은 재귀 어떤 종류로 교체 할 수 있습니다 rmdir, 같은find $src -d -exec rmdir {} +

유일한 결함은 -P옵션이 전체 복사 작업이 아닌 각 파일의 진행률을 표시 한다는 것 입니다. 작은 파일이 많은 디렉토리를 이동하려는 경우이 방법이 유용하지 않을 수 있습니다. rsync의 최신 개발 버전 --info=progress2에는 전체 작업의 진행률을 나타내는 대체 플래그 가 있습니다.


2

에 진행 표시 줄을 추가하는 패치 coreutil 방지하려면 mv및 것은 cp, gcp(Goffi의 복사기) 새로운 대안 : http://wiki.goffi.org/wiki/Gcp/en

재귀 및 자세한 cp옵션과 동일한 방식으로 사용합니다 .-r-v

여러 명령이 동시에 호출 될 때 파일 큐를 사용합니다. 또한 복사 된 파일 이름을 로그에 기록 할 수 있습니다 . 자세한 내용 은 소스 저장 매뉴얼 페이지 섹션을 참조하십시오.

다음은 시작하기에 좋은 자습서입니다 gcp. http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/


cp의 gcp와 같은 gmv가 있습니까?
— CodyChan

나는 동등한 것을 찾지 못했습니다. 그건 그렇고, 단일 파일 시스템에서 "mv"를 실행할 때 진행률 표시 줄이 필요하지 않습니다 ... 매우 빠릅니다. 서로 다른 두 파일 시스템간에 이동이 수행되면 cp로 구현 된 다음 성공하면 소스를 제거하거나 실패하면 대상을 제거합니다. gcp를 기반으로하는 간단한 쉘 스크립트가 제대로 작동 할 수 있습니다 (원본과 대상이 실제로 다른 파일 시스템에 있는지 먼저 확인)
— Yves Martin

2

첫째 : 30 분 이상 컴퓨터를 사용하지 않으려는 경우를 제외하고는 ionice를 사용하지 않고 큰 파일을 복사하지 않습니다.

두 번째 : 모든 파티션이 축소되어 파티션 내 복사 시간이 걸리지 않습니다. 그것이 긴 사본이라면 나는 du -sm파일을 처리 df -m | grep copy_to_partition합니다. 그런 다음 얼마나 많은 시간이 걸리는지 궁금하다면 df다시하고 파일이 얼마나 복사되었는지 확인하십시오.


이온 성 팁을 공유 하시겠습니까? mv cpu-wise 및 disk i / o wise에 어떤 우선 순위를 부여 하시겠습니까? 여기 내 설정이 있지만 renicing 후에도 CPU로드는 여전히 높습니다 : imgur.com/a/DLMJplz
— ychaouche

2

내 민트에서 나는 이것 또는 컬 솔루션에 gcp를 사용하고 싶다 (정말 멋지다)

gcp SOURCE DESTINATION

설치해야 할 수도 있습니다 sudo apt-get install gcp

그리고 진행률 표시 줄에 대한 정보가있는 매우 훌륭하고 훌륭한 작업

  • 총계
  • 받은 %
  • % Xferd
  • 평균 DL
  • 속도 업로드
  • 남은 시간
  • 보낸 시간
  • 총 시간
  • 현재 속도

읽을 수있는 형식은 다음과 같습니다.

curl -o DESTINATION FILE://source

또한 먼저 설치해야 할 수도 있습니다 sudo apt-get install curl


gcp파일 이동을 지원하지 않습니다. 즉, 성공적인 복사 후 소스 파일을 수동으로 제거해야합니다.
— Karl Richter

2

이렇게하면 진행률 표시 줄을 제공하지만, 공격하지 않는 CTRL-T당신은 보내드립니다 SIGINFO에 mv가에 작동하고 파일과 얼마나 멀리 따라 그것이 그 과정에서 어떤보고 할 것이다. 대용량 파일 전송에는이 기능을 사용하는 것이 매우 편리하며 여러 개의 작은 파일 전송에는 유용하지 않을 수 있습니다.

빠른 예 :

mv 135/61 /Volumes/Jules/135/
# hit C-t
load: 1.08  cmd: cp 35470 uninterruptible 0.00u 0.04s
135/61/1/1-s2.0-S006738-main.pdf -> /Volumes/Jules/135/61/1/1-s2.0-S006738-main.pdf  68%

1
이것은 나를 위해 작동하지 않았습니다 : INFO: unknown signal; killall -l lists signals. SIGINFO가 표준 POSIX가 아닌 일부 BSD에만 있다고 생각합니다.
— Brian Minton

2
권리. Mac OS X에서는 작동하지만 Ubuntu에서는 작동하지 않을 수 있습니다.
— 찰스

1

mv -v이동 된 파일 당 한 줄 pv -l을 인쇄하고 줄 수 (실제 파일 수)를 기준으로 진행률 을 인쇄하는 데 사용 합니다 .

필요합니다 pv(파이프 뷰어) : http://www.ivarch.com/programs/pv.shtml

mv -v sourcedir targetdir | pv -l -s filecount > logfile

파일 수를 얻으려면 다음 명령을 사용하십시오.

find sourcedir | wc -l

이 명령은 복사 된 파일 수를 기준으로 진행 정보를 표시합니다. 작은 파일이 많을 때 가장 효과적입니다. 거대한 파일이 몇 개만 있으면 재미가 없을 것입니다.

그 주 mv빨리해야 동일한 파티션에. mv다른 파티션에 대해서는 cp source target뒤에 나오는 것과 동일 합니다 rm source. 다음은 진행 정보가있는 디렉토리를 복사하는 두 가지 명령입니다.

복사 된 파일 수를 기준으로 진행 상황을보고하려면 :

cp -av sourcedir targetdir | pv -l -s filecount > logfile

복사 된 바이트를 기준으로 진행 상황을보고하려면 :

tar c sourcedir | pv -s size | tar x -C targetdir

자세한 내용은 여기를 참조하십시오 : 디렉토리 복사를 위해 pv를 통한 진행 정보


1

나는 'mv'명령을 시작한 후에이 답변 을 검색하게되어 결국 다시 시작하고 싶지 않습니다. 이 상황에서 진행 상황을 모니터링하는 매우 간단한 방법 (또는 죽일만한 가치가 있는지 확인하는)은 다음을 실행하는 것입니다.

du -hs /directory/you're/moving/data/to

이렇게하면 디렉토리의 크기 만 인쇄되므로 얼마나 많은 데이터가 복사되었는지 확인하거나 몇 번 실행하여 데이터가 얼마나 빨리 전송되는지 확인할 수 있습니다.

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