절대 경로를 사용하고 하위 경로를 제외하는 rsync

절대 경로를 사용하고 하위 경로를 제외하는 rsync

경로에 다음 구조가 있다고 가정해 보겠습니다.origin_path

origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...

destination_path위의 구조를 이라는 다른 경로에 복제하고 싶지만 오직디렉토리에 해당하는 경로 포함위에.

즉, 나는 다음을 얻고 싶습니다.destination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

명확히 하기 위해 대상 경로의 이 구조 중 일부가 이미 존재할 수 있습니다(예: 폴더 destination_path/X=*).

내가 이해한 바로는 @Gilles의 의견 덕분에 rsync필터가 이에 매우 적합할 수 있습니다. 그러나 나는 이전에 그것들을 사용해 본 적이 없으며 제공된 예제를 추론하기가 약간 어렵습니다.Rsync 필터: 하나의 패턴만 복사내 상황에.

내 경우에는 어떤 순서로 항목을 포함하거나 제외해야 합니까? 그리고 rsync에 origin_pathdestination_path전역 경로를 사용하도록 어떻게 지시합니까 ? (상대 경로를 사용하여 항목을 복사하는 것과 반대)

답변1

다음은 원하는 작업을 수행해야 합니다.

rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/

첫 번째 규칙에는 모든 디렉터리가 포함됩니다(그렇지 않으면 rsync가 최상위 디렉터리로 내려오지 않습니다). 두 번째 규칙에는 "B" 하위 디렉터리의 모든 항목이 포함됩니다. 세 번째 규칙은 다른 모든 것을 제외합니다. 이 --prune-empty-dirs옵션은 빈 디렉터리를 무시합니다(첫 번째 규칙에 모든 디렉터리를 포함하므로).

관련 정보