여러 소스 및 대상을 rsync

여러 소스 및 대상을 rsync

다음은 예상대로 작동합니다.

rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pineapple /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/

그러나 단순화하면 다음과 같습니다.

rsync --delete-after -uavh --progress \
    /home/usr/test1/cool-beans /home/usr/test2/ \
    /home/usr/test1/pineapple /home/usr/test2/ \
    /home/usr/test1/pizza /home/usr/test2/ \
    /home/usr/test1/dragons /home/usr/test2/elephant/ 

오류가 발생합니다. 필요에 따라 "dragons" 폴더를 "elephant"에 넣는 대신 "cool-beans", "pineapple", "pizza" 및 "dragons"를 모두 "elephant"에 넣는 것은 바람직하지 않습니다. 동일한 출력을 얻으면서 어떻게 단순화된 방식으로(첫 번째 예를 중복하지 않고) 작성할 수 있습니까? 감사해요!

답변1

rsync단일 명령에 여러 대상을 포함 할 수 없습니다 . "단순화된" 버전을 시도하면 마지막 경로를 제외한 모든 경로 가 복사된 데이터의 소스로 간주되므로 cool-beans, pineapple및 자체 에서 복사(복제)하는 것이 아닙니다 . 이 옵션은 처음으로 무언가를 시도할 때 매우 유용합니다.pizzadragonstest2--dry-run

통화를 두 번으로 줄일 수 있습니다. 다음 중 하나를 완료하세요.

rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/

또는 함수를 사용하여 공통 요소를 캡슐화합니다.

myRsync1() {
    rsync --delete-after -uavh --progress "$@"
}

myRsync1 /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
myRsync1 /home/usr/test1/dragons /home/usr/test2/elephant/

대부분의 경로가 고정 구성 요소로 시작되도록 보장할 수 있는 경우 공개 경로(이미 존재해야 함)를 첫 번째 인수로 제공하여 함수 호출의 시각적 사용을 더욱 단순화할 수 있습니다.

myRsync2() (
    cd -- "$1" || return 1
    shift
    rsync --delete-after -uavh --progress "$@"
)

그런 다음 전화하십시오.

myRsync2 /home/usr/test1 cool-beans pineapple pizza /home/usr/test2/
myRsync2 /home/usr/test1/dragons /home/usr/test2/elephant

또는:

myRsync2 /home/usr test1/cool-beans test1/pineapple test1/pizza test2/
myRsync2 /home/usr test1/dragons test2/elephant

답변2

당신은 할 수 없습니다. rsync여러 소스를 허용할 수 있지만 대상은 하나만 허용할 수 있습니다. rsync는 여러 번 호출되어야 합니다.

그러나 동일한 rsync 및 옵션 부분을 변수에 넣고 호출할 수 있습니다.

rsync_call="rsync --delete-after -uvah --progress"
$rsync_call /source/one/ /destination/one/
$rsync_call /source/two/ /destination/two/

관련 정보