대상 서버 파일이 이동되고 Rsync가 동일한 파일을 다시 복사했습니다.

대상 서버 파일이 이동되고 Rsync가 동일한 파일을 다시 복사했습니다.

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표시된 날짜 이후에 생성/수정된 파일 및 디렉터리만 포함합니다.

관련 정보