Rsync 제외 폴더

Rsync 제외 폴더

rsync 스크립트를 실행 중이며 특정 폴더를 제외하고 싶습니다. rsync를 사용하면 파일을 생성하고 거기에 모든 제외 항목을 추가해야 한다는 것을 알고 있지만 .txt, 내가 원하는 모든 제외 항목이 포함된 스크립트에 전역 문자열을 포함시킨 다음 해당 전역 문자열을 rsync 명령에 추가할 수 있는지 궁금합니다.

전역 문자열 예

ROOT_EXCLUDE="--exclude=/dev --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/run --exlucde=/mnt --exlcude=/media

재동기화 명령

rsync -au --exclude 'ROOT_EXCLUDE' /Users/Me/Home /Users/me/Backup

답변1

제외 목록의 요소에 공백이나 와일드카드가 포함되어 있지 않으면 ROOT_EXCLUDE변수를 정의하고 이를 사용할 수 있습니다(따옴표 제외). 따옴표가 없는 변수 확장은 각 공백 시퀀스에서 변수 값을 분할한 다음 각 요소에 와일드카드 문자가 포함되어 있으면 와일드카드 패턴으로 확장됩니다.

ROOT_EXCLUDE="--exclude=/dev --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/run --exclude=/mnt --exclude=/media"
rsync -au $ROOT_EXCLUDE /Users/Me/Home /Users/me/Backup

제외 목록에 와일드카드를 사용하려는 경우 패턴과 일치하는 이름을 가진 파일이 없는 한 표준 셸에서 작동합니다. 이런 단어로 만들기에는 까다로운 가정 --exclude=*.bak이고, 써보면 대개는 그렇지 않습니다 --exclude *.bak. 이러한 함정을 피하려면 와일드카드 확장을 끄면 됩니다.

ROOT_EXCLUDE="--exclude=/dev --exclude=*.bak"
set -f
rsync -au $ROOT_EXCLUDE /Users/Me/Home /Users/me/Backup
set +f

배열을 지원하는 쉘(ksh, bash, zsh, 일반 sh는 아님)에서는 인수 목록을 다음 위치에 넣을 수 있습니다.대량으로. 이는 매개변수 목록을 변수에 채우는 데 권장되는 방법입니다.

#!/bin/bash
ROOT_EXCLUDE=('--exclude=/dev' '--exclude=*.bak')
rsync -au "${ROOT_EXCLUDE[@]}" /Users/Me/Home /Users/me/Backup

일반 sh(모든 Bourne/POSIX 쉘, 예: sh또는 )에는 다음을 사용하여 설정할 수 있는 dash명명되지 않은 배열(위치 인수 $1, $2, ...) 이 있습니다. set -- …위치 매개변수를 임시로 변경해야 하는 경우 함수에서 임시로 변경하세요. 각 함수 호출에는 고유한 위치 매개변수 세트가 있습니다.

set -- '--exclude=/dev' '--exclude=*.bak'
rsync -au "$@" /Users/Me/Home /Users/me/Backup

-x제외할 디렉터리 목록을 만드는 대신 마운트 지점을 건너뛰는 옵션을 전달해야 합니다. 등을 처리합니다 /proc. /sys그러나 여러 파티션에 걸쳐 파일을 백업하려면 모든 소스를 명시적으로 포함해야 합니다. 홈 디렉터리를 백업하는 경우 건너뛸 메모리 내 파일 시스템이 없을 수 있지만 네트워크 파일 시스템이나 기타 FUSE 파일 시스템이 있을 수 있습니다.

rsync -ax /Users/Me/Home /Users/me/Backup

1더 일반적으로는 IFS.

관련 정보