아래 명령을 사용하여 서버 간에 파일을 전송하고 있습니다.
scp -rc blowfish /source/directory/* [email protected]:/destination/directory
update
에 대한 명령 처럼 수정된 파일만 전송하는 방법이 있습니까 cp
?
답변1
rsync
당신의 친구입니다.
rsync -ru /source/directory/* [email protected]:/destination/directory
원본에 더 이상 존재하지 않는 파일을 대상에서 삭제하려면 옵션을 추가하세요 --delete
.
답변2
일반적으로 이유가 있기 때문에 scp를 요청합니다. 즉, 대상에 rsyncd를 설치할 수 없습니다.
files=`find . -newermt "-3600 secs"`
for file in $files
do
sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done
답변3
또 다른 옵션:
remote_sum=$(ssh ${remote} sha256sum ${dest_filename})
remote_sum=${remote_sum%% *}
local_sum=$(sha256sum ${local_filename})
local_sum=${local_sum%% *}
if [[ ${local_sum} != ${remote_sum} ]]; then
scp ${local_filename} ${remote}:${remote_filename}
fi
이는 하나의 파일에는 괜찮지만 SSH가 반복 연결을 얼마나 빨리 수행할 수 있는지에 따라 많은 파일에 대해서는 약간 느려질 수 있습니다. SSH 연결에 Controlmaster가 설정되어 있다면 그다지 나쁘지 않을 수도 있습니다. while 디렉토리 트리를 재귀적으로 복사해야 하는 경우 모든 파일에 대한 합계를 계산하는 단일 SSH 명령을 수행하고 결과를 bash 연관 배열에 저장하고 로컬 호스트에서 동일한 작업을 수행한 다음 파일 합계를 비교하여 여부를 결정할 수 있습니다. 복사를 하려고. 그러나 원격지에 rsync를 설치하는 것이 거의 확실히 더 쉽습니다.