rsync: 권한이 없는 파일을 건너뛰는 중입니다.

rsync: 권한이 없는 파일을 건너뛰는 중입니다.

rsync -rlptD다른 사용자의 디렉토리를 복사하는 데 사용합니다 . 복사 권한이 없는 일부 파일(미리 알 수 없었음)이 있습니다. rsync가 이를 무시하도록 하는 방법이 있습니까? 문제는 rsync가 0이 아닌 값을 반환하면 bash -x 스크립트가 종료된다는 것입니다.

답변1

Rsync에는 이 옵션이 없습니다. 두 가지 해결책이 있습니다. 하나는 rsync 오류 메시지를 구문 분석하는 것입니다. 이는 매우 강력하지 않습니다. 다른 하나는 필터링할 읽을 수 없는 파일 목록을 생성하는 것입니다.

cd /source/directory
exclude_file=$(mktemp)
find . ! -readable -o -type d ! -executable |
  sed -e 's:^\./:/:' -e 's:[?*\\[]:\\1:g' >>"$exclude_file"
rsync -rlptD --exclude-from="$exclude_file" . /target/directory
rm "$exclude_file"

find없는 경우 적절한 지시문으로 바꾸 -readable십시오 .-executable-perm

이는 이름에 개행 문자가 포함된 읽을 수 없는 파일이 없다고 가정합니다. 이러한 문제를 처리해야 하는 경우 다음과 같이 구분된 빈 파일 목록을 생성하고 옵션을 다음 -0으로 전달해야 합니다 rsync.

find . \( ! -readable -o -type d ! -executable \) -print0 |
  perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"

답변2

이 특정 상황에 대해 간단한 해결 방법을 만들었습니다.

rsync --args || $(case "$?" in 0|23) exit 0 ;; *) exit $?; esac)

반환 코드가 0 또는 23이면 반환하고, 0다른 모든 경우에는 종료 코드를 반환합니다.

그러나 다음 사항에 유의하는 것이 중요합니다.Partial transfer due to error권한 오류뿐만 아니라 모든 오류를 무시합니다 ., 종료 코드의 모든 내용을 캡처합니다 23. rsync 상태 코드에 대한 자세한 내용은 다음을 참조하세요.이 링크.

관련 정보