rsync
오랫동안 사용 하고 있는데 필요에 따라 완벽하게 작동하지만 대상 서버 파일이 몇 초마다 이동되고 rsync
동일한 파일이 로컬 SFTP 서버에서 다시 복사되는 상황에 직면했습니다. 명령을 사용하고 있지만 --ignore-existing
이 경우에도 작동하지 않습니다.
sshpass -p "ABCDE" rsync -avvtzh --ignore-existing -e "ssh -o StrictHostKeyChecking=no" --log-file="/home/toor/log/uc.log" [email protected]:share/CACHEDEV1_DATA/Lanein1/Unicard/ /home/toor/UCDownloads/
답변1
대상 파일이 이동된 경우 해당 rsync
파일은 더 이상 존재하지 않습니다 . 이 --ignore-existing
플래그는 파일이 예상한 곳에 존재하지 않기 때문에 쓸모가 없으므로 무시할 것이 없습니다.
플래그 파일을 생성하고 rsync
마지막 성공적인 실행 이후 수정된 파일만 푸시할 수 있습니다. 이와 같은 뼈대는 작동할 것입니다(파일 소스가 로컬이 아닌 원격 시스템에 있기 때문에 생각보다 더 복잡합니다).
path='/share/CACHEDEV1_DATA/Lanein1/Unicard'
flag="$path.flag"
# Must have a flag file. If we don't then create one from the epoch
if ssh -nq [email protected] "[ ! -f '$flag' ]"
then
touch -t 197001010000 /tmp/1970
scp -p /tmp/1970.flag [email protected]:"$flag"
rm -f /tmp/1970.flag
fi
# Flag the start of the synchronisation
ssh -nq [email protected] "date >'$flag.tmp'"
# Copy files newer than the flag
if ssh -nq [email protected] "find '$path/' -depth -newer '$flag' -print0 |
rsync -avz --files-from - --from0 [email protected]:/ /home/toor/UCDownloads/
then
# Install the new flag
ssh -nq [email protected] "mv -f '$flag.tmp' '$flag'"
fi
QNAP에 익숙하지 않은 분들을 위해 설명하자면, 이 touch
명령은 표준으로 존재하지 않으며 rsync
해당 기능이 축소되었습니다. 나는 이것을 로컬 클라이언트에서 사용하여 touch
날짜가 1970-01-01인 파일을 만든 다음 이를 초기 플래그로 원격 시스템에 전송했습니다. ( touch
원격 시스템에 존재한다면 애초에 원격에서 파일을 생성하는 것이 훨씬 쉬울 것입니다.) find
표시된 날짜 이후에 생성/수정된 파일 및 디렉터리만 포함합니다.