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
.