rsync 앵커 제외 패턴 무시

rsync 앵커 제외 패턴 무시

나는 다음을 수행합니다.

rsync --recursive --delete --delete-excluded --exclude-from=$HOME/etc/rsync_exclude.txt --relative --safe-links --executability . /path/to/savedir

소스 디렉터리는 작업 디렉터리입니다( 로 지정됨 .).

작업 디렉토리에는 디렉토리 ./repository와 파일이 있습니다 ./Vagrantfile.

파일 rsync_exclude.txt에는 다음 줄이 포함되어 있습니다.

/repository/
/Vagrantfile

나는 이 항목이 내 repository항목을 초과할 것으로 예상했습니다 Vagrantfile.

  • 선행 슬래시는 이름이 저장 시 루트 디렉터리(즉, 작업 디렉터리)에 고정된다는 것을 나타냅니다.
  • 후행 슬래시저장소파일이 아닌 디렉터리임을 분명히 하세요.

그러나 두 항목이 모두 복사됩니다.

내가 뭘 잘못했나요?

(이것은 MacOS Sierra에서 실행되는 rsync 2.6.9입니다(그러나 이 경우에는 중요하지 않다고 생각합니다).

고쳐 쓰다:

rsync를 디버깅할 때( -vv및 --dry-run 사용) 고정되지 않은 모든 규칙이 허용된다는 것을 명확하게 볼 수 있습니다(예: rsync가 나에게 알려줍니다).git/ 모드는 vp5/.git 디렉토리를 숨기므로), 그러나 앵커링 규칙 중 어느 것도 작동하지 않습니다. 또한 소스 디렉터리(.)를 ./ 또는 $PWD로 바꾸려고 시도했지만 효과가 없었습니다.

또한 선행 /를 제거하면(예: /repository/가 저장소/가 됨) 디렉터리가 제외됩니다. 물론 이제 해당 디렉토리는 제외됩니다.어딘가에트리에서는 이 특별한 경우에는 문제가 되지 않지만 일반적으로 내가 원하는 것은 아닙니다.

답변1

다음은 rsync버전 3.1.2에 적용됩니다.

$ ls -F
archive/  backup/  mk-archive.sh*  mk-backup.sh*  mk-cloud.sh*  mk-source.sh*  source/

$ cat /tmp/excludes
/archive/
/backup/
/mk-archive.sh
/mk-backup.sh

$ mkdir -p /tmp/target
$ rsync --relative --recursive --delete --delete-excluded --exclude-from=/tmp/excludes . /tmp/target/

$ ls -F /tmp/target
mk-cloud.sh*  mk-source.sh*  source/

여기서 일어나는 일은 의 매뉴얼 페이지에 설명된 대로 rsync이므로 패턴은 /복사본의 시작 부분(예: 아래 .)에 즉시 고정되어야 합니다.

앵커 포함/제외 패턴
앞에서 언급했듯이 전역 포함/제외 패턴은 "전송의 루트" [...]에 고정되어 있습니다.

일치는 전송 루트를 기준으로 하기 때문에 소스 경로의 후행 슬래시를 변경하거나 옵션 사용을 변경하면 --relative일치에 사용해야 하는 경로에 영향을 미칩니다(대상 호스트에서 파일 트리의 반복 횟수도 변경됨). ). [...]

예:

cd /home; rsync -a --relative me/foo you/ /dest

+/- 패턴: ( /me/foo/bar 지정된 경로에서 시작)
+/- 패턴: ( /you/bar/baz 위와 동일)

대상 파일: /dest/me/foo/bar
대상 파일:/dest/you/bar/baz

-vv명령에 (or)를 추가하면 --verbose --verbose어떤 제외가 수행되는지 확인할 수 있습니다 rsync.

관련 정보