rsync에는 하위 디렉터리만 포함됩니다.

rsync에는 하위 디렉터리만 포함됩니다.

현재 저는 하위 디렉터리의 파일만 포함하고 다른 모든 파일은 제외하는 솔루션을 찾기 위해 고심하고 있습니다. 파일 구조는 다음과 같습니다

$ tree ../
../
├── from
│   ├── a
│   │   ├── aa
│   │   │   └── x.txt
│   │   ├── a.txt
│   │   └── b.txt
│   └── b
│       ├── b.txt
│       └── c.txt
└── to

그리고 a/aa/의 내용만 /로 전송됩니다.

$ rsync -avh --include=a/aa/*** --exclude=* ../from/ ../to/

작동하지 않고 to/는 비어 있지만 a/를 사용하여 이 작업을 수행합니다.

$ rsync -avh --include=a/*** --exclude=* ../from/ ../to/

효과가있다

$ tree ../
..
├── from
│   ├── a
│   │   ├── aa
│   │   │   └── x.txt
│   │   ├── a.txt
│   │   └── b.txt
│   └── b
│       ├── b.txt
│       └── c.txt
└── to
    └── a
        ├── aa
        │   └── x.txt
        ├── a.txt
        └── b.txt

하지만 a.txt와 b.txt가 있으면 안 됩니다. 내가 놓친 게 무엇입니까?

당신의 도움을 주셔서 감사합니다.

답변1

첫 번째 명령에서는 이후의 모든 명령이 a/aa/***일치 하지만 일치하는 항목이 없으므로 아무것도 복사되지 않습니다.aa/a/

두 번째 명령에서는 그 뒤에 오는 모든 항목을 a/***일치시키므로 콘텐츠 a/이상의 내용을 복사하게 됩니다 .a/aa/

예를 들어 다음과 같이 하면 충분합니다.

rsync -avh --include='/a/' --include='/a/aa/***' --exclude='*' from/ to/

man rsync도착하다INCLUDE/EXCLUDE PATTERN RULES

관련 정보