"scp"명령을 사용하여 새 파일 만 복사하는 방법은 무엇입니까?


24

오류가 발생한scp 명령을 사용하여 수백 개의 파일을 다른 컴퓨터로 복사하고있었습니다 . 이제 파일을 다시 복사하겠습니다. 이미 복사 된 파일을 복사하지 않는 방법이 있습니까?stalled

답변:


40

사용할 수 있습니다 rsync. rsync실제로 이러한 유형의 작업을 위해 설계되었습니다.

통사론:

rsync -avh /source/path/ host:/destination/path

또는

rsync -a --ignore-existing /local/directory/ host:/remote/directory/

처음 실행하면 모든 내용이 복사되고 새 파일 만 복사됩니다.

원래 SCP 기반 솔루션을 요청한 것처럼 SSH 연결을 통해 트래픽을 터널링해야하는 경우 (예 : 기밀 목적으로) -e ssh에 매개 변수를 추가 하기 만하면 됩니다 rsync. 예를 들면 다음과 같습니다.

rsync -avh -e ssh /source/path/ host:/destination/path

되어 --ignore-existing정말 필요한?
Meysam

이 매뉴얼 예제에서 : rsync -t *.c foo:src/-> "이것은 * .c 패턴과 일치하는 모든 파일을 현재 디렉토리에서 머신 foo의 디렉토리 src로 전송합니다. 파일이 이미 원격 시스템에 존재하면 rsync remote- 업데이트 프로토콜은 차이 만 전송하여 파일을 업데이트하는 데 사용됩니다 "
Meysam

1
나는 일반적으로 사용 rsync -avuzh /source/path/ host:/destination/path합니다. 그것은 하나의 명령으로 전체 작업을 수행하고 후속 호출에서 필요한 파일 만 전송합니다.
Edward Falk

6

어떤 이유로 든 scp를 고수하려면 로컬 데이터에 대한 w 권한을 제거 하고 (권한이있는 경우) scp가이를 만지지 않을 수 있습니다. 더 정확하게 말하자면 :

  1. chmod a-w local/*.tar.gz (로컬 디렉토리에서)
  2. scp remote/*.tar.gz local

이것은 매우 효율적이지는 않지만 scp 이외의 것으로 변경하지 않고 빠른 임시 솔루션이 필요한 경우 도움이 될 수 있습니다. (Kudos : 대상의 기존 파일을 바꾸지 않고 scp )


나는이 솔루션을 정말 좋아한다. 원격 센서에서 아카이브로 파일을 수집하고 있습니다. 전체 작업 디렉토리에는 각각 아카이브 하위 디렉토리가 있습니다. 파일이 보관소에 들어가면 절대 변경되지 않습니다. 보관 된 파일을 -w로 표시하는 것이 정말 쉬울 것이므로 이것이 내가하는 일입니다. 아카이브 디렉토리 외부의 작업 파일은 그대로 남겨 둘 수 있으므로 낮 동안 업데이트 프로그램을 실행하면 진행중인 파일이 계속 복사됩니다. 이것이 바로 내가 찾던 것입니다. TNX 많이!
SDsolar

4

SCP로이 작업을 수행하는 방법에 대한 정확한 대답은 없었습니다. 왜냐하면 원래 질문이 요청한 것이기 때문입니다.

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

파일 복사가 끝나면 권한을 다시 변경하십시오.

sudo chmod a+w -R /files


1
아마도 원래의 질문은 "이 문제를 어떻게 해결할 수 있을까"였는데, rsync가 답입니다.
Edward Falk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.