it-swarm.dev

파일을 이동하고 진행률을 어떻게 볼 수 있습니까 (예 : 진행률 표시 줄 사용)?

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

129
letronje

패치 된 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 진행 표시 줄을 직접 가져옵니다.

50
fschmitt

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

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

alias cp='rsync -aP'

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

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

#!/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 :

‘bar’-‘cat’= ASCII 진행률 표시 줄 포함)

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

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

96
echox

실행중인 명령과 관련된 설명자를 찾고 진행률과 속도를 표시 할 수있는 progress라는 새 도구가 있습니다. available here

progress -w

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

92
naugtur

pipe viewer command pv을 사용하여 진행률 표시 줄을 표시 할 수 있습니다.

pv /original/file > /new/file

마운트 된 네트워크 파일 시스템 (gziptar과 결합)을 통해 큰 파일을 복사하는 데 종종 이것을 사용합니다. 단점은 디렉토리가 아닌 하나 파일 만 복사 할 수 있다는 것입니다. 그리고 새 파일 이름을 지정해야합니다. cp처럼 대상 디렉토리를 지정할 수 없습니다. 그러나 복사는 pv의 목적이 아닙니다. 이 도구는 강력한 도구이며 파일 복사 이상의 기능을 수행합니다. pv의 더 많은 예는 홈페이지를 참조하십시오.

더 좋은 옵션은 rsync -aP를 사용하는 것입니다. mv 대신에 --remove-source-files 플래그를 추가하십시오. 명령을 자주 사용하려면 .bashrc에 추가하십시오.

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

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

36
Lamnk

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

6
Christian Madsen

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

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

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

$src not 로 끝나는 지 확인하십시오. 그렇지 않으면 백 슬래시로 끝나지 않습니다. GNU cp.

rm -r는 디렉토리가 아닌 각 파일을 성공적으로 복사 한 후에 만 ​​소스 파일을 제거하기 때문에 끝에 --remove-source-files가 필요합니다. &&는 rsync가 성공적으로 완료된 경우에만 실행합니다. 편집증 인 경우 find $src -d -exec rmdir {} +와 같은 일종의 재귀 rmdir로 대체 할 수 있습니다.

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

4
Tobia

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

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

2
HandyGandy

진행률 표시 줄은 아니지만 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%
2
Charles

내 민트에서 나는 이것이나 컬 솔루션에 gcp를 사용하고 싶다.

gcp SOURCE DESTINATION

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

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

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

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

curl -o DESTINATION FILE://source

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

2
ThePentadactyl

mvcp에 진행률 표시 줄을 추가하는 coreutil 패치를 피하려면 gcp (Goffi 's CoPier)가 새로운 대안입니다 : http : //wiki.goffi. org/wiki/Gcp/en

재귀에 대한 옵션 -r 및 자세한 정보에 대한 -v와 함께 cp와 같은 방식으로 사용합니다.

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

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

2
Yves Martin

사용하다 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는 빠르다는 점에 유의하십시오. 다른 파티션에 대한 mvcp 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
lesmana

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

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

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

1
qazmonk

rsmv 이름으로 저장된 다음 스크립트를 사용합니다.

#!/usr/bin/env bash

rsync -aP --remove-source-files "[email protected]" && rm -rf "${@:1:$#-1}"

공백을 사용하여 둘 이상의 소스와 파일 이름을 처리합니다.

$ rsmv source1 source2 source\ 3 "source 4" dest
0
mixel