하나의 규칙 파일로만 rsync하고 일부 경로는 제외하고 선택된 하위 경로를 재귀 적으로 포함


3

폴더의 모든 내용을 제외하고 일부 하위 폴더를 제외하고 싶 --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. 따라서 규칙 파일이 상당히 커질 것입니다.


을 사용 -F하지만 .rsync-filter파일 내부의 내용을 표시하지 않습니다 .
— ams

@ams 내 감독을 잡아 주셔서 감사합니다. .rsync-filter파일이 추가되었습니다.
— stepse

답변:


1

당신은 이것을 필요로합니다 :

+ /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있지만 이로 인해 실제 빈 디렉토리뿐만 아니라 내용을 제외하기로 선택한 디렉토리도 제거됩니다.


예, 첫 번째 블록은 내 질문에 대답합니다. 두 번째 블록도 숙고 할 계획이지만 만족합니다. 며칠 안에 다른 사람이 들어올 경우를 대비하여 답변을 드리겠습니다. 올바른 SA 에티켓이 아닌 경우 저를 잊어 버리십시오.
— stepse

지금 받아들이면 나중에 마음을 바꿀 수 있다고 생각합니다.
— ams

답변을 수락했습니다. 감사합니다. 저의 명성이 여전히 미미한 수준이기 때문에 공감할 수도 없었습니다.
— stepse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.