한 컴퓨터에서 다른 컴퓨터로 파일을 복사하고 있습니다. 머신 A의 파일은 다음 위치에 있습니다.
/usr/a/foo/*
/usr/b/foo/*
/usr/c/foo/*
/usr/d/foo/*
머신 B는 이러한 파일이 다음 위치에 있기를 원합니다.
/foo-1.2.3/usr/a/*
/foo-1.2.3/usr/b/*
/foo-1.2.3/usr/c/*
/foo-1.2.3/usr/d/*
평면화된 구조를 사용하여 rsync -ae ssh user@remote:/var/*/foo/ /foo-1.2.3/var/
4개의 디렉토리를 각각 개별적으로 복사할 수 있지만 외부 도우미(awk, sed, perl...)를 사용하지 않고 단일 명령으로 이 작업을 수행할 수 있는지 여부는 알 수 없습니다.
이 시점에서 이것은 순전히 호기심에서 나온 것입니다. 이를 알아내는 데는 4개의 개별 복사본을 만드는 것보다 시간이 더 오래 걸렸기 때문입니다.
답변1
포함/제외 규칙을 사용하여 이를 수행할 수 있습니다. (테스트되지 않은) 것과 같은 것 :
rsync -a --include=*/foo/*** --exclude=* user@remote:/usr/ /foo-1.2.3/usr
***
에서 소개 되었습니다 rsync 2.6.7
. 이것이 없으면 포함 디렉터리( foo/
)와 또 다른 포함 콘텐츠( foo/**
)가 필요합니다. 이와 같이 포함을 사용하는 경우 모든 것이 기본적으로 포함되고 파일이 규칙 목록의 첫 번째 일치 항목에 따라 포함/제외되므로 마지막 규칙으로 적절하게 광범위한 제외가 필요합니다( --exclude=*
먼저 배치된 항목은 복사되지 않음). .