여러 루트가 있는 rdist 구성을 rsync로 변환

여러 루트가 있는 rdist 구성을 rsync로 변환

rsync와 유사한 rdist 구문을 구현 중이며 rsync를 사용하여 내 파일과 폴더를 동기화할 수 있지만 이 rdist 구문을 처리하는 동안 이 부분을 이해하지 못하며 except (/home/user1/log1/*/*/sql.net /home/user1/log1/*/*/core)내 rdist 포함 파일은 다음과 같습니다.FILES=(/home/user1/log1 /home/user1/rightlog)

rsync에서 이를 어떻게 달성할 수 있나요? 나는 이것을 시도했다rsync -rtu --exclude='/log1/*/*/sql.net' exclude='/log1/*/*/core' $FILES remote@host:$FILES

정확한 rdist를 복제해야 합니까, 아니면 추가 조정이 필요합니까? 원하는 출력을 얻지 못하고 때로는 sql.net다른 폴더에 있을 수도 있으므로 이 작업을 수행할 수 없습니다 --exclude=sql.net.

답변1

제외 목록이 없어도 이는 rsync $FILES remote@host:$FILES작동하지 않습니다. rsync /home/user1/log1 /home/user1/rightlog remote@host:/home/user1/log1 /home/user1/rightlog대상으로 확장됩니다 /home/user1/rightlog(그러나 rsync는 로컬 소스와 원격 소스를 혼합하고 있다고 불평합니다).

rsync를 사용하여 여러 소스를 지정할 수 있지만 모두 동일한 대상에 복사되며 제외 목록과 같은 매개변수는 모든 소스에 적용됩니다.

서로 다른 하위 트리에 서로 다른 매개변수가 필요한 경우 rsync를 별도로 호출해야 합니다. 다른 매개변수가 필요하지 않은 경우 공통 루트를 동기화하되 동기화할 부분만 포함합니다.

rsync --include='/log1' --include='/rightlog' --exclude='/*' /home/user1 remote@host:/home/user1

다른 제외 목록을 가져오기 위해 별도의 rsync 호출이 필요하지 않습니다. 왜냐하면 선행 경로 구성 요소만 포함하면 되기 때문입니다.

rsync --include='/log1' --include='/rightlog' --exclude='/*' \
      --exclude='/log1/*/*/sql.net' --exclude='/log1/*/*/core' \
      /home/user1 remote@host:/home/user1

관련 정보