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 상태 코드에 대한 자세한 내용은 다음을 참조하세요.이 링크.