답변:
사용할 수 있습니다 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
rsync -t *.c foo:src/
-> "이것은 * .c 패턴과 일치하는 모든 파일을 현재 디렉토리에서 머신 foo의 디렉토리 src로 전송합니다. 파일이 이미 원격 시스템에 존재하면 rsync remote- 업데이트 프로토콜은 차이 만 전송하여 파일을 업데이트하는 데 사용됩니다 "
rsync -avuzh /source/path/ host:/destination/path
합니다. 그것은 하나의 명령으로 전체 작업을 수행하고 후속 호출에서 필요한 파일 만 전송합니다.
어떤 이유로 든 scp를 고수하려면 로컬 데이터에 대한 w 권한을 제거 하고 (권한이있는 경우) scp가이를 만지지 않을 수 있습니다. 더 정확하게 말하자면 :
chmod a-w local/*.tar.gz
(로컬 디렉토리에서)scp remote/*.tar.gz local
이것은 매우 효율적이지는 않지만 scp 이외의 것으로 변경하지 않고 빠른 임시 솔루션이 필요한 경우 도움이 될 수 있습니다. (Kudos : 대상의 기존 파일을 바꾸지 않고 scp )
SCP로이 작업을 수행하는 방법에 대한 정확한 대답은 없었습니다. 왜냐하면 원래 질문이 요청한 것이기 때문입니다.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
파일 복사가 끝나면 권한을 다시 변경하십시오.
sudo chmod a+w -R /files
--ignore-existing
정말 필요한?