디렉토리 복사를 위해 pv를 통한 진행 정보


14

매우 큰 디렉토리 (여기에서 테라 바이트로 표시)를 복사하고 진행 상황을 모니터링하고 싶습니다.

나는 pv이것이 좋은 유틸리티라는 것을 알았지 만 디렉토리를 재귀 적으로 복사하는 데 어떻게 사용할 수 있습니까? ( pv src > dst디렉토리이기 때문에 작동하지 않습니다)

PS : pvMac X 포트에서 설치 한 OS X Mountain Lion에서 실행

답변:


21

사용하다 rsync --progress [SRC] [DST]

man rsync매우 유용한 옵션이 많으므로 페이지를 확인하십시오 . -a아카이브는 좋은 시작이지만 정확한 요구 사항에 따라 다릅니다.

파이프를 통한 복사는 특히 파일 기반 인 경우 복사 프로세스를 불필요하게 느리게합니다.


파이프를 통한 복사가 프로세스 속도를 늦추는 이유는 무엇입니까? 파이프가 제공하는 버퍼링과 파이프와 관련된 멀티 태스킹은 내가 말하고자하는 문제를 도울 것입니다. rsync는 다중 프로세스이며 내부적으로 IIRC 파이프를 사용합니다. 파일 기반이 아닌 복사 프로세스 란 무엇입니까?
Stéphane Chazelas

배쉬는 편리하지만 빠르지는 않습니다. 특히 하나의 명령을 다른 명령으로 파이핑 할 때.
jippie

@StephaneChazelas : 파이프 버퍼는 8KB에 불과하기 때문입니다. rsync와 같은 프로그램은 훨씬 더 큰 내부 버퍼를 사용하려고 할 수 있습니다.
Zan Lynx

10

당신은 사용할 수 있습니다 tar또는 pax또는 cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
또한 명령에 a v를 추가 tar하여 파일 이름을 볼 수도 있습니다 .
peterph

복사하기 전에 소스 폴더를 압축합니다. 내 폴더의 크기는 5TB이므로 이것이 최선의 방법인지 잘 모르겠습니다. 나는 pv를 사용하는 것이 정말로 좋은 진행 상태를 보여주기 때문에 조언이 있습니까?
Tak

@Tak, 아니오 압축이 없으므로 압축하지 않습니다. tar cf -파일 및 해당 메타 데이터가 포함 된 스트림을 출력합니다. 파이프는 파이프를 통해 pv로 공급되어 tar진행률 표시를 인쇄하는 동안 다른쪽에 tar데이터를주고 다른 스트림은 해당 스트림의 데이터를 추출합니다. 세 명령 모두 동시에 실행되어 데이터를 처리하고 디스크에 저장된 것은 없으며 파이프 버퍼 이외의 메모리에는 아무것도 없으며 킬로바이트에 불과한 명령 내부 버퍼는 없습니다.
Stéphane Chazelas

@ StéphaneChazelas 댓글 주셔서 감사합니다. 나는 그것을 시도하고 작동하고 있지만, 진행률 표시 줄에 왼쪽에서 오른쪽으로 계속 진행하는 예상 백분율이 표시되지 않는다는 것뿐입니다. 왜 그런지 알아? 나는이 매개 변수 -petra와 함께 pv를 사용했는데 일반적으로 막대가 끝날 때까지 막대가 채워지는 진행률 막대를 보여줍니다. 귀하의 답변도 상향 조정했습니다.
Tak

@Tak, pv전송할 데이터의 양을 알 방법이 없습니다. 해당 금액의 추정치가있는 경우 -s옵션을 사용하여이 금액을 전달할 수 있습니다 ( du -sb src파일이 충분히 크면 GNU 에서 적절한 근사치를 제공합니다)
Stéphane Chazelas

2

타르.

tar -cf - /var/log/ | pv | tar -C . -x

예:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

다음은 진행 정보가있는 디렉토리를 복사하는 명령입니다.


작은 파일이 많은 경우 :

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

복사 된 파일 수에 따라 진행률이보고됩니다.

/dev/null필요하지 않은 경우으로 리디렉션 할 수 있습니다 logfile.

다음 명령을 사용하여 얻으십시오 filecount.

find sourcedir | wc -l

큰 파일이 거의없는 경우 :

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

복사 된 바이트를 기준으로 진행률을보고합니다.

targetdir 존재해야합니다.

다음 명령을 사용하여 얻으십시오 size.

du -sh sourcedir

rsync를 사용하려는 경우 :

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

얻기 filecount위의 그림과 같이.

동일한 시스템에서 복사하는 경우와 rsync -a거의 동일합니다 cp -a. rsync의 장점은 네트워크를 통해 복사하거나 이전 복사본을 업데이트 (또는 비교)하는 경우입니다.

자세한 내용은 여기를 참조하십시오.


0

du -b /directory/일반 복사 명령이 진행되는 동안 소스와 대상 모두에 대해 작업을 수행하고 둘을 비교할 수 있습니다. 이것은 마찬가지로 효과적이며 파이프를 통해 복사 프로세스를 진행하여 속도를 늦추지 않습니다.


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