원격-> 로컬 시나리오에서 rsync를 사용하여 데이터를 동기화하는 스크립트가 있습니다. rsync 명령이 실행 된 직후 오류 코드가 0인지 확인하십시오. 0이면 추가 명령이 수행됩니다. 그러나 이것은 rsync가 성공적으로 실행되었지만 실제로 변경되지 않았다는 사실을 고려하지 않습니다. 이로 인해 동일한 제로 조건이 관계없이 실행되며 약간 중복됩니다.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
rsync 명령을 기반으로 실제로 변경 사항이 있는지 확인하기 위해 이것을 확장하는 가장 좋은 방법은 무엇입니까? -i 플래그가 stdout에 출력을 제공 할 수 있다는 것을 읽었지만 어떻게 조건부 블록에 배치 할 수 있습니까?
a=$("rsync command")
. 이것은 실행 할 rsync
명령 및 저장 stdout
의를 a
. 그런 다음a
| grep /
또는 그와 비슷한 것을 추가 한 다음 grep의 종료 상태를 확인하십시오 $?
. 출력이 없으면 1이어야합니다.
-v
거기에있어서, 이미 stdout하는 데 필요한 정보를 제공하고 있습니다 ... 예 : 실제로 전송 된 파일 목록. 아무것도 변경되지 않으면 그냥./
입니다.