로컬 파일이 업데이트되었는지 보고하려면 rsync를 가져오세요.

로컬 파일이 업데이트되었는지 보고하려면 rsync를 가져오세요.

원격 호스트에서 로컬 호스트로 가져오기 위해 rsync를 실행 중입니다.

rsync -a --update user@remotehost:/files/ ~/files/

Java에서 명령을 실행하고 종료 코드를 사용하여 명령이 성공했는지 확인합니다.

로컬 파일이 수정된 경우 명령 보고를 다시 받을 수 있습니까? 종료 코드로 보고하는 것이 이상적입니다.

답변1

rsync종료 코드에서는 이를 알 수 없습니다 . 종료 코드에는 사전 정의된 의미가 문서화되어 있습니다.

내 생각에 Java에서 이 작업을 수행하는 가장 좋은 방법은 --info=NAME업데이트된 디렉터리와 파일 이름만 언급하는 옵션을 추가하는 것입니다.

rsync -a --info=NAME --update user@remotehost/files/ ~/files/

그러면 업데이트된 파일과 디렉터리의 이름이 한 줄에 하나씩 표준 출력(fd = 0)에 인쇄됩니다.

그런 다음 출력을 수집 rsync하고 문자열의 개행 수를 계산합니다.

출력을 수집하는 좋은 방법은 이 답변 에서 찾을 수 있다고 생각 java하지만 아직 시도하지 않았습니다.https://stackoverflow.com/a/9048519/5484716

하다아니요표준 출력과 표준 오류 스트림을 사용 redirectErrorStream하거나 다른 방법으로 결합합니다. 이렇게 하면 오류 메시지가 업데이트된 파일로 간주되며 이는 원하는 결과가 아닙니다.

답변2

rsync 인쇄 복사 파일 이름을 갖는 @DavidKing의 아이디어를 기반으로 하고 stdin이 비어 있을 때 grep이 0이 아닌 종료 상태로 종료된다는 @yashma의 정보를 확장하면 만족스러울 정도로 짧고 신비한 한 줄의 내용을 생각해 낼 수 있습니다.

# prints file list, exits nonzero when that list is empty
rsync -a --info=NAME --update user@remotehost:/files/ ~/files/ | grep .

답변3

플래그를 --info켜면 rsync전송된 모든 파일의 경로가 출력됩니다. 종료 코드는 rsync성공/실패를 나타내므로 명령 주위에 스크립트를 래핑하지 않으면 사용할 수 없습니다.

#!/bin/bash

files=$(rsync -a --info=NAME --update user@remotehost/files/ ~/files/)

if [ $files = "" ]; then
  # files weren't transferred
  exit 0
else
  # files were transferred
  exit 1
fi

rsync그런 다음 명령을 직접 호출 하는 대신 Java에서 스크립트를 호출하십시오 . rsync전송 시작과 끝 부분에 추가 텍스트 줄이 있을 수 있으므로 if추가 출력 줄을 고려하여 명령문을 조정해야 할 수도 있지만 기본 아이디어는 작동합니다.

답변4

반환 코드를 통해 정보를 얻는 방법은 쉘 스크립트를 작성하고, rsyncjava에서 쉘 스크립트를 호출하여 실행하는 것입니다. 아래에 요약한 것처럼 여기에는 몇 가지 중요한 문제가 있습니다. 쉘 스크립트는 다음과 같습니다:

#!/bin/sh
if OUTPUT=$(rsync -a --info=NAME --update user@remotehost/files/ ~/files/)
then
    if [ "$OUTPUT" != "" ]                   # got output?
    then
        exit 0  # yes, success, "some" files were updated
    fi
fi
exit 1  # either rsync failed or no files were updated

이것의 가장 큰 문제는 동기화 프로세스 자체가 성공적으로 완료되었는지 여부를 알 수 없다는 것입니다. 파일이 업데이트되었는지 여부만 알 수 있습니다. 그래서 출력을 수집하고 Java에서 행 수를 계산하는 것이 좋습니다.그리고반환 코드 확인자바에서.

관련 정보