대상 디렉터리가 있는 경우에만 rsync를 실행하시겠습니까?

대상 디렉터리가 있는 경우에만 rsync를 실행하시겠습니까?

일반적으로 오프사이트에 저장되지만 때로는 마운트되는 보조 백업 드라이브가 있습니다. 설치된 경우 백업 드라이브를 보조 백업에 자동으로 복제하는 기능을 crontab에 추가하고 싶습니다. 나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

if [ -d $target_dir ]; then rsync -a --delete $src_dir $target_dir; fi

하지만 쉘 스크립트를 사용하지 않고 동일한 작업을 rsync에 요청할 수 있는 방법이 있는지 궁금합니다. 6.02*10^23 명령줄 옵션이 있다는 점을 고려하면...

답변1

다음은 작동할 수 있는 트릭입니다... 제 예에서 $target_dir이 "원격" 시스템(localhost)에 있으면 rsync가 성공하고 그렇지 않으면 실패합니다(원격 rsync를 실행하지 않음).

src_dir=/etc;target_dir=/test/a;rsync -azp --rsync-path="[[ -d $target_dir ]] && rsync" $src_dir localhost:$target_dir

원격 디렉터리가 존재하지 않는 경우 실패 결과 코드는 12여야 합니다. 왜냐하면 다음 실패로 인해 실제로 원격 rsync를 실행하지 않기 때문입니다."[[ -d $target_dir ]]"

12 Error in rsync protocol data stream

이 작업을 수행하려면 TCP 소켓을 사용해야 하므로 속도가 느려질 수 있습니다.

또 다른 옵션은 다음 /etc/crontab과 같은 것입니다(스크립트 필요 없음).

50 23 * * * root (src_dir="/test/src_dir"; target_dir="/test/target_dir"; [ -d $src_dir ] && [ -d $target_dir ] && rsync -a -v --delete ${src_dir}/ ${target_dir}/) &>> /var/log/test.log

관련 정보