부분적으로 복사 된 파일로 scp를 재개하는 방법은 무엇입니까? [닫은]


97

scp shell 명령을 사용하여 거대한 파일 폴더를 복사합니다.

그러나 어느 시점에서 나는 실행중인 명령을 죽여야했습니다 (Ctrl + C 또는 kill).

내 이해에 scp는 파일을 순차적으로 복사 했으므로 부분적으로 복사 된 파일은 하나만 있어야합니다.

성공적으로 복사 된 파일을 덮어 쓰지 않고 부분적으로 복사 된 파일을 올바르게 처리하기 위해 동일한 scp 명령을 어떻게 재개 할 수 있습니까?

추신 : rsync에서 이런 종류의 일을 할 수 있다는 것을 알고 있지만 scp는 어떤 이유로 나에게 더 빠르며 대신 사용합니다.


4
전송을 다시 시작할 수있는 작업을 수행하는 데 추가 시간을 소비하기 때문에 rsync가 더 느리다고 생각합니다. rsync를 사용하여 부분 전송을 완료하는 것을 고려할 수 있습니다.
Keith Thompson

2
당신이 영리 싶다면, 당신은 항상 시도 할 수 있습니다 dd적절한과 skip변수 및 파이프 ssh:
마크 Nunberg

1
이것은 SO의 주제에서 벗어난 것입니다. 그것은 SuperUser에 속하며 실제로 거기에서 요청되었습니다 .
Dan Dascalescu

답변:


185

당신은 rsync이상 사용해야합니다ssh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path

주요 옵션은 -P입니다.--partial --progress

-a(아카이브 모드 용) 및 -z(압축 활성화 용 ) 과 같은 다른 옵션 도 사용할 수 있습니다.

매뉴얼 : https://download.samba.org/pub/rsync/rsync.html


43
rsync가 scp로 시작된 배치 복사를 재개한다는 점을 알고 싶었습니다.
Craig Anderson

6
"skipping directory"가 표시됩니다. 또한 지정하지 않는 한 오류 -r입니다. 출처 : lucasb.eyer.be/snips/rsync-skipping-directory.html
아르투르 Czajka

4
나를 위해 일했지만 --append도 추가했습니다 .... rsync -P --append -e ssh remoteuser @ remotehost : / remote / path / local / path
cnd

1
@CraigAnderson은 빠진 중요한 포인트입니다. 대답은 다운로드가 시작하려면 rsync로 시작되어야한다고 제안하는 것처럼 들립니다.
Willa

1
이 질문에 주어진 옵션은 나를 위해 작동하지 않았다, 그러나 이것은했다 :rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
토끼 토끼

26

rsync의 대안 :

사용 sftp옵션은 -r및 옵션 (재귀 전체 디렉토리에 복사) -asftpget기존 파일의 부분 전송을 재개 명령을 사용합니다.

전제 조건 : 귀하의 sftp구현이 이미 가지고 get-a옵션을 선택합니다.

예:

/foo/bar원격 서버에서 로컬 현재 디렉토리로 디렉토리 를 복사 합니다. 디렉토리 bar는 로컬 현재 디렉토리에 생성됩니다.

echo "get -a /foo/bar" | sftp -r server

4
내 서버가 ssh에서 로그인을 허용하지 않으므로 rsync가 작동하지 않기 때문에 솔루션이 좋습니다. 내가 지금 여기에 대신 다운로드 업로드 할 필요가 내 명령은 다음과 같습니다echo "put -a foo/bar" | sftp -r server:/foo
카를로스 라파엘 라미레즈

1
rsync가 (기본 포트가 아닌) ssh 친화적 인 것 같지 않기 때문에 부분적으로 다운로드 된 파일을 재개 할 수있는 옵션으로 보입니다.
codezombie dec.

11

OpenSSH의 6.3 때문에, 당신은 사용할 수있는 reget명령sftp.

get기존 로컬 파일의 끝에서 전송을 시작한다는 점을 제외 하면와 구문이 동일합니다 .


6

또 다른 가능성은 이미 시작한 scp가 멈출 때 구제하는 것입니다.

ctrl + z를 백그라운드로 설정하고 중지 한 다음 ssh를 수신 서버로 이동하고 로그인 한 다음 종료합니다. 이제 scp 프로세스를 fg하고 '중단'에서 다시 시작하는 것을보십시오!


Mac OS X에서 저를 위해 일했습니다. 게시 해 주셔서 감사합니다. 오늘 제 베이컨을 구했습니다!
Ben Hitchcock

1

rsync가 처음에 잘 실행될 때 몇 초 후에 멈 추면 다음과 같은 무차별 대입 솔루션으로 끝났습니다.

cat run_me.sh
#!/bin/bash
while [ 1 ]
do
  rsync --partial --progress --rsh=ssh user@host:/path/file.tgz file.tgz &
  TASK_PID=$!
  sleep 60
  kill $TASK_PID
  sleep 2
done

1

-rsh-P옵션을 사용할 수 있습니다 rsync. -P부분 다운로드 용이며-rsh ssh procotol을 통해 전송되었음을 나타냅니다.

완전한 명령은 다음과 같습니다. rsync -P -rsh remoteuser@remotehost:/remote/path /local/path


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