폴더의 모든 내용을 제외하고 일부 하위 폴더를 제외하고 싶 --exclude
거나 --include
명령 줄 옵션을 추가하지 않고 단일 규칙 파일로만 수행하고 싶습니다 . 이것이 가능한가? 유지 관리 및 문서화가 더 쉬우므로 단일 규칙 파일이 중요합니다.
다음 명령을 실행합니다
rsync -a -F --filter "merge backup-filter" /mnt/home/common /mnt/backup
파일로 backup-filter
:
# non-rooted rules take precedence
+ .git/*
+ .gitignore
- .*.sw?
# rooted rules
+ /common/backup*
- /common/opt/
+ /common/usr/
# FIXME
+ /common/root/startup/*
+ /common/root/.config/gopt/*
- /common/root/*
그리고 두 개의 .rsync-filter
파일
# cat ./usr/bin/.rsync-filter
# Assume command-line option --filter=':- .gitignore', which
# backs up all file/folders that aren't listed in ./.gitignore
# cat ./usr/.rsync-filter
+ usr/bin
- */
시작하는 규칙 블록 FIXME
은 깨진 조각입니다. 모든 내용을 제외하는 것을 의미 /common/root
하지만, 내용을하자 startup
및 .config/gopt
복사. 이 때문에 고장 startup
및 .config/gopt
복사되지 않습니다.
시간이 지남에 따라 다양한 수준에서 제외 경로를 더 추가하고 경로에 대해 여기에서 수행하는 것과 같은 일부 하위 경로를 추가 할 계획입니다 /common/root
. 따라서 규칙 파일이 상당히 커질 것입니다.
답변
당신은 이것을 필요로합니다 :
+ /common/root/startup/
+ /common/root/startup/*
+ /common/root/.config/
+ /common/root/.config/gopt/
+ /common/root/.config/gopt/*
- /common/root/.config/*
- /common/root/*
또는 나중에 파일 별 규칙을 무시하지 않으려는 경우 다음과 같이하십시오.
+ /common/root/startup/
+ /common/root/.config/
+ /common/root/.config/gopt/
- /common/root/.config/*
- /common/root/*
문제는 결코 되풀이되지 않았 startup
거나 지시하지 .config
않았기 때문 - /common/root/*
입니다.
이 버전은 당신이 있음을 명시 적으로 말한다 않는 해당 디렉토리를 원한다. 이와 같은 하위 디렉토리를 선택하려면 모든 상위 디렉토리 레벨에 대해이 작업을 수행해야합니다.
또 다른 트릭을 포함하는 모든 디렉토리 와 + */
상단을하고 제외 파일 당신이 원하지 않는를 - /common/root/**
. 그런 다음 빈 디렉토리의 혼란을 정리할 수 --prune-empty-dirs
있지만 이로 인해 실제 빈 디렉토리뿐만 아니라 내용을 제외하기로 선택한 디렉토리도 제거됩니다.